gpt4 book ai didi

python - SQLAlchemy 参数化一个不带引号的值

转载 作者:行者123 更新时间:2023-12-05 04:48:10 26 4
gpt4 key购买 nike

我正在尝试像这样在数据库中动态创建用户:

from sqlalchemy.sql import text

def create_user(user: str, password: str):
stmt = text("CREATE USER :user WITH PASSWORD :password")
engine.execute(stmt, user=user, password=password)

create_user("bob", "password123")

但问题在于 SQLAlchemy 会将此查询参数化为:

使用密码“password123”创建用户“bob”

抛出错误:

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.SyntaxError) syntax error at or near "'bob'"
LINE 1: CREATE USER 'bob' WITH PASSWORD 'password123'

这个错误被抛出是因为 bob 应该是不带引号的。正确的 SQL 输出实际上应该是:

使用密码“password123”创建用户 bob

如何防止 SQLAlchemy 将参数化值用引号引起来?

最佳答案

在标准查询参数化不适用的情况下,例如尝试将数据库对象名称合并到 SQL 语句中时,我们必须求助于动态 SQL:

with engine.begin() as conn:
sql = "CREATE USER {} WITH PASSWORD {}".format("bob", "password123")
conn.exec_driver_sql(sql)

(显然,必须小心避免 Little Bobby Tables 来访。)

关于python - SQLAlchemy 参数化一个不带引号的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68219690/

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