【问题标题】:Passing table name as a parameter in pyodbc在pyodbc中将表名作为参数传递
【发布时间】:2011-07-12 18:14:50
【问题描述】:

我正在尝试将pyodbc 中的表名作为参数传递以从ms sql 2005 访问数据。我尝试将其替换为?,但它永远无法正常工作。我很高兴收到有关如何完成此任务的任何建议。

【问题讨论】:

    标签: python database sql-server-2005 odbc pyodbc


    【解决方案1】:

    由于您使用的是 pyodbc,我假设您没有调用 SPROC。 我建议在 python 中构建你的 SQL 字符串,然后将它传递给 SQL 来执行。

    import pyodbc
    dbconn = pyodbc.connect(ConnectionString)
    c = dbconn.cursor()
    
    j = 'table1' #where table1 is entered, retreived, etc
    query = "Select * from %s" % j
    c.execute(query)
    result = c.fetchall()
    print 'Done'
    

    【讨论】:

    • 请注意表名不是来自用户输入或浏览器反馈 - 这是 SQL 注入的设置。
    • @Mark,你说得很好。但至少表名比某些其他类型的 SQL 输入更容易清理。
    • 这是一个相当古老的答案。有谁知道 pyodbc 现在是否添加了一些更安全的方法来做到这一点?类似于psycopg2.sql.SQL 模板对象的东西,也许吧? (psycopg2 是 Python 的 PostgreSQL 数据库适配器)
    【解决方案2】:

    您不能将变量作为 SQL Server 的表名。您需要使用 dynamic SQL 才能使用。

    在这里查看如何处理动态表名。 http://www.sommarskog.se/dynamic_sql.html#objectnames

    【讨论】:

    • 我找到了这样做的好方法!我会尽快分享!
    猜你喜欢
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多