【发布时间】:2012-08-05 09:05:58
【问题描述】:
我打算在 Django 项目中使用非常简单的原始 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,因为我已经阅读了很多关于它的好东西。
如果我打算只将它用于简单的原始 SQL,那么与更简单的 MySQLdb 包装器相比,使用 SQLAlchemy 是否会产生任何显着的性能开销,例如 CPU 使用率、内存使用率。 SQLAlchemy 的所有其他电池都没有多大用处。
【问题讨论】:
-
仅供参考,您可以直接从 MySQLdb 取回 dicts 而无需处理元组。只需添加:
import MySQLdb.cursors并在您的连接调用中添加一个命名参数cursorclass=MySQLdb.cursors.DictCursor。从fetchall()返回的迭代器将是字典。 -
所以这里的假设是查询是针对您没有模型的数据库?
-
@sberry 是的,我已经看到了,我想要一个包装器来简化插入、更新和选择。
-
请看Why is SQLAlchemy insert with
sqlite25 times slower than using sqlite3 directly?的回复。虽然不是mysql,但Mike 发布了一个性能测试示例代码,您可以使用mySQL 将其应用于您的案例并扩展为包括所有CRUD操作。从那里发布的结果中,我得出结论,仅使用SQLAlchemy Core时不应该有任何显着的性能下降。 -
另请参阅Is SQLAlchemy still recommanded if only used for raw sql query? 的另一个 SO 答案。
标签: python django sqlalchemy mysql-python