gpt4 book ai didi

python - SQL Alchemy 参数化查询,绑定(bind)表名作为参数给出错误

转载 作者:太空狗 更新时间:2023-10-30 00:19:54 27 4
gpt4 key购买 nike

我在 SQL alchemy 中使用利用文本对象的参数化查询,但得到了不同的结果。

工作示例:

import sqlalchemy as sqlal
from sqlalchemy.sql import text

db_table = 'Cars'
id_cars = 8
query = text("""SELECT *
FROM Cars
WHERE idCars = :p2
""")
self.engine.execute(query, {'p2': id_cars})

产生 sqlalchemy.exc.ProgrammingError 的例子:(pymysql.err.ProgrammingError) (1064, "你的 SQL 语法有错误)

import sqlalchemy as sqlal
from sqlalchemy.sql import text

db_table = 'Cars'
id_cars = 8
query = text("""SELECT *
FROM :p1
WHERE idCars = :p2
""")
self.engine.execute(query, {'p1': db_table, 'p2': id_cars})

关于如何使用动态表名运行查询的任何想法,该表名也受到 sql 注入(inject)的保护?

最佳答案

我使用 PostgreSQL 和 psycopg2 后端。我能够使用:

from psycopg2 import sql
from sqlalchemy import engine

connection: sqlalchemy.engine.Connection
connection.connection.cursor().execute(
sql.SQL('SELECT * FROM {} where idCars = %s').format(sql.Identifier(db_table)),
(id_cars, )
)

PyMySQL 不支持。

关于python - SQL Alchemy 参数化查询,绑定(bind)表名作为参数给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52494572/

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