将表名作为参数传递给pyodbc

Siv*_*nam 6 python database odbc sql-server-2005 pyodbc

我试图在pyodbc中传递表名作为参数来访问ms sql 2005中的数据.我试着用它替换它?但它永远不会奏效.我很乐意接受有关如何实现这一目标的任何建议.

JMo*_*ney 5

由于您使用的是 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'
Run Code Online (Sandbox Code Playgroud)

  • 请注意表名不是来自用户输入或浏览器反馈 - 这是 SQL 注入的设置。 (4认同)
  • 这是一个相当古老的答案。有谁知道 pyodbc 现在是否添加了一些更安全的方法来做到这一点?也许类似于 [`psycopg2.sql.SQL`](http://initd.org/psycopg/docs/sql.html#psycopg2.sql.SQL) 模板对象?(psycopg2 是 Python 的 PostgreSQL 数据库适配器) (2认同)

Mik*_*son 2

SQL Server 不能使用变量作为表名。您需要使用动态 SQL才能使其工作。

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