Python後端開發注意事項(Tornado)

2021-08-28 06:28:11 字數 2420 閱讀 6236

對於實時性要求高的資料,始終使用主庫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...