2012-08-08 61 views
2

我打算在Django項目中使用非常簡單的原始SQL。 例如:SQL鍊金術的性能,如果只用於原始的SQL?

SELECT name,doc_id,doc_content,creation_date from doc_table where uid = 'xxx' limit 1 ;

主要要求:

  • 易於執行SQL查詢和獲取數據 - 如。如果我使用MySQLdb,我不想通過遊標重複執行查詢,然後處理元組以獲取所需數據的字典。

  • 防護SQL注入,以及數據的正確轉義。

有兩種選擇,

a)使用SQLAlchemy的,即使只用於原始的SQL。

b)利用改寫MySQLdb的包裝,或者寫一個。

我向傾斜SQLAlchemy的,因爲我已經讀了很多關於它的好東西。

會有用的SQLAlchemy如CPU使用率,內存使用率相比,一個簡單的MySQLdb的包裝,如果我打算用它僅用於簡單原始SQL的任何顯著的性能開銷。所有其他電池的SQLAlchemy沒有多大用處。

+1

僅供參考,你可以從類型的字典背MySQLdb的情況下直接處理元組。只需添加:import mysqldb.cursors,並在你的連接調用中添加一個命名參數cursorclass = MySQLdb.cursors.DictCursor。 'fetchall()'返回的迭代器將是字典。 – sberry 2012-08-08 09:24:20

+0

所以這裏的假設是查詢是針對沒有模型的數據庫? – 2012-08-08 09:27:23

+0

@sberry是的,我已經看到,我想要一個包裝,以減輕插入,更新,選擇。 – DhruvPathak 2012-08-08 09:31:30

回答

6

的要求,發佈評論作爲一個答案:

請參閱答案Why is SQLAlchemy insert with sqlite 25 times slower than using sqlite3 directly?。雖然不是mysql,但是Mike發佈了性能測試示例代碼,您可以使用mySQL將其應用於您的案例,並將其擴展爲包含所有CRUD操作。從那裏發佈的結果中,我會得出結論,僅使用SQLAlchemy Core時不應該有任何顯着的性能下降。

也期待在另一個SO回答Is SQLAlchemy still recommanded if only used for raw sql query?