對於實時性要求高的資料,始終使用主庫session進行查詢訪問,而非從庫;
session在commit前,外部是看不到改變的;
使用 sqlalchemy orm 建立資料庫模型時,統一使用sqlalchemy.schma.index(name, *expressions, **kw)
方式建立索引,構建 tuple 傳入資料表類的__table_args__
屬性即可;
index("索引名", "索引列1", "索引列2", ... , [unique=true])
同時,索引名的命名需遵循以下規範:
另外,增加、刪除、修改資料庫索引時,務必同步修改資料庫模型(models.py)中的相應描述。
舉例:
class
test
(mapbase)
:
__tablename__ =
"test"
__table_args__ =
(# t1 單索引
index(
'ix_t1'
,'t1'),
# t1, t2 聯合索引
index(
'ix_t1_t2'
,'t1'
,'t2'),
# t2, t3 唯一索引
index(
'uix_t2_t3'
,'t2'
,'t3'
, unique=
true),
)id= column(integer, primary_key=
true
, nullable=
false
, autoincrement=
true
)
t1 = column(integer, nullable=
false
, default=
0)
t2 = column(integer, nullable=
false
, default=
0)
t3 = column(integer, nullable=
false
, default=
0)
需要返回統一錯誤頁面時,使用send_error(),不直接使用write_error();
mysql 5.6版本在排序翻頁時有相同值得資料取出來的順序是不正確的,導致資料顯示有問題,解決方法就是多加乙個排序條件;
不得在可能傳入使用者輸入資料的地方使用exec()或eval(),對字串進行型別轉換時,應使用更安全的ast.literal_eval();
models類裡面移除乙個字段,除了加上備註之外,在功能穩定後,在models裡面刪除該欄位,並且在資料庫裡面把對應字段刪掉,全域性搜尋將涉及的**都進行優化。
使用 sqlalchemy 中的sqlalchemy.sql.operators.columnoperators.in_()
進行條件篩選時,如果傳入in_()
中的list/tuple為空,那麼可能無法有效的利用索引,造成嚴重效能問題,例如:
q = self.session.query(models.accountinfo).filter(models.accountinfo.id.in_())
我們生產環境中使用的是1.1.4版本的sqlalchemy,所以編碼時需要注意,對in_()中的list/tuple可能為空的情況進行判斷處理。
如果你在shell列印資訊中看到sawarning: the in-predicate on "account_info.id" was invoked with an empty sequence. this results in a contradiction, which nonetheless can be expensive to evaluate. consider alternative strategies for improved performance.
這樣的警告資訊,說明你沒有對in_()中的list/tuple為空的情況進行正確的處理。
注意函式的預設引數陷阱:不要用可變物件和函式等作為函式的預設引數;函式的預設引數僅在這個函式物件生成時被執行一次,而不是在每次呼叫這個函式時執行(如同函式的靜態變數一樣);
注意-同名變數,迴圈裡面的變數與外部的變數名一樣會導致出現問題;(原因:python變數的最小作用域為函式級:def foobar(): )
注意-對公共地方的修改,一定要注意對所有呼叫的地方都要做足測試;
前後端互動規範:
後端傳給前端的資料應保持資料型別的一致:list應始終為list,字串應始終為字串,避免返回none物件或「none」字串致使前端無法判空。
後端開發SQL注意事項
in操作在很多時候是可以優化查詢的,但是當有order by或者其他需要遍歷所有結果的語句時需要注意,如果in的內容比較多,應該分批查,例如select from table where name in and type in 1,2,3 order by id desc limit 10,如果要查...
開發注意事項
一 編碼方面 1.ui層面的東西,盡量畫素級復現設計稿,做完之後在ie,firefox,chrome中預覽一遍,確認沒有問題。2.拿到設計稿之前,對業務需求要有所了解,拿到設計稿之後進行推演,檢查互動是否有誤,如果有誤再三確認之後再開始做。3.元件書寫方式,如果輸入的資料能保持一致,則元件裡面處理資...
python 注意事項
from functools import reducereduce 函式會對引數序列中元素進行累積。函式將乙個資料集合 鍊錶,元組等 中的所有資料進行下列操作 用傳給 reduce 中的函式 function 有兩個引數 先對集合中的第 1 2 個元素進行操作,得到的結果再與第三個資料用 func...