gpt4 book ai didi

python - 如果仅用于原始 sql 查询,是否仍建议使用 SQLAlchemy?

转载 作者:太空狗 更新时间:2023-10-29 17:28:21 28 4
gpt4 key购买 nike

使用 Flask,我很想知道 SQLAlchemy 是否仍然是使用原始 SQL(直接 SELECT x FROM table WHERE ...)查询数据库的最佳方式,而不是使用ORM 或者是否有更简单但功能强大的替代方案?

感谢您的回复。

最佳答案

我一直使用 SQLAlchemy 进行直接查询。

主要优势:它为您提供了针对 SQL 注入(inject)攻击的最佳保护。 SQLAlchemy 做正确的事,无论你给它什么参数。

我发现它在根据条件调整生成的 SQL 方面也很有效。显示上面有多个过滤器控件的结果集?只需在一组 if/elif/else 结构中构建您的查询,您就知道您的 SQL 仍然是黄金。

以下是一些实时代码的摘录(较旧的 SA 版本,因此语法可能略有不同):

# Pull start and end dates from form
# ...
# Build a constraint if `start` and / or `end` have been set.
created = None
if start and end:
created = sa.sql.between(msg.c.create_time_stamp,
start.replace(hour=0, minute=0, second=0),
end.replace(hour=23, minute=59, second=59))
elif start:
created = (msg.c.create_time_stamp >=
start.replace(hour=0, minute=0, second=0))
elif end:
created = (msg.c.create_time_stamp <=
end.replace(hour=23, minute=59, second=59))

# More complex `from_` object built here, elided for example
# [...]
# Final query build
query = sa.select([unit.c.eli_uid], from_obj=[from_])
query = query.column(count(msg.c.id).label('sent'))
query = query.where(current_store)
if created:
query = query.where(created)

它的来源代码要复杂得多,但我想在这里突出显示日期范围代码。如果我必须使用字符串格式构建 SQL,我可能会在某处引入 SQL 注入(inject)漏洞,因为忘记引用值要容易得多。

关于python - 如果仅用于原始 sql 查询,是否仍建议使用 SQLAlchemy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11543266/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com