SQL炼金术参数化查询,绑定表名作为参数给出

2024-04-26 11:01:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

工作示例:

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语法有错误)

^{pr2}$

有没有关于如何使用动态表名来运行查询的想法,该表名也受到了sql注入的保护?在


Tags: 对象text文本importidsql参数sqlalchemy
2条回答

我想已经太晚了。 您只需利用python编写代码的好处:

要使用的库:

import sqlalchemy
from sqlalchemy import create_engine, MetaData, Table, func, event
from sqlalchemy.sql import text
from urllib.parse import quote_plus

连接(我在您的示例中没有看到的-这里是与sql azure的连接):

^{pr2}$

你的例子:

db_table = 'Cars'
id_cars = 8
query = text('SELECT * FROM ' + db_table + 'WHERE idCars = ' + id_cars)
connection = engine.connect()
connection.execute(query)
connection.close()

我希望有帮助。 BR公司

我使用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, )
)

相关问题 更多 >