【问题标题】:SQL Query with variable injection - SQL Alchemy - Python带有变量注入的 SQL 查询 - SQL Alchemy - Python
【发布时间】:2021-12-03 21:47:43
【问题描述】:

我有一个关于使用 sqlalchemy/python(3.8) 将变量注入到 sql 查询中的问题。

到目前为止,我研究的是添加 %s 和 email_address=?然后添加它(email_address)但没有成功

我想要做的是捕获用户输入并动态运行选择查询。

print(" What is the email address??")
email_address = input()
conn = create_engine("mssql+pyodbc://test_table:username@127.0.0.1:3306/test_db?driver=SQL Server?Trusted_Connection=yes'", echo = False)
sql = pd.read_sql('Select id,email_address from test_table where email_address = email_address', conn)
print(sql)

【问题讨论】:

    标签: python sql variables sqlalchemy user-input


    【解决方案1】:

    尝试:

    print(" What is the email address??")
    email_address = input()
    conn = create_engine("mssql+pyodbc://test_table:username@127.0.0.1:3306/test_db?driver=SQL Server?Trusted_Connection=yes'", echo = False)
    sql = pd.read_sql('Select id,email_address from test_table where email_addres=?', conn, params=(email_addres,))
    print(sql)
    

    【讨论】:

    • 感谢您的回答! Rafael 我刚试了一下,显示如下:发生了异常:ProgrammingError(注意:显示了完整的异常跟踪,但执行在:处暂停)(pyodbc.ProgrammingError)('SQL包含0个参数标记,但有1个参数已提供', 'HY000') [SQL: Select id,email_address from test table where email_address = %(email_address)s] [参数: {'email_address': 'daniel'}] (此错误的背景:sqlalche.me/e/14/f405 ) -- 这很奇怪,因为 db 没有删除,表存在,表中的信息存在
    • 您正在使用 pyodbc。所以我的回答是错误的。将email_address = %(email_address)s 更改为email_addres=?,将params={"email_address": email_addres} 更改为params=(email_addres,)。如果这能解决您的问题,我会更新答案
    • 嗯,这就像 magic 一样,非常感谢您的回答。这适用于多个变量吗?电子邮件地址 =?和 id=?', conn, params=(email_address,id,)) -- ? -- LE,工作,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 2021-10-22
    • 1970-01-01
    相关资源
    最近更新 更多