如何使用用户给定的模式和 table 名称构建 sql 查询

How to build sql query with schema and table name given by user

我正在接受用户的输入,然后尝试从中构建查询

conn = pyodbc.connect(r'Driver={SQL Server};'
                  'Server=LOANER-001262;'
                  'Database=classic;'
                  'Trusted_Connection=yes;')
cursor = conn.cursor()
print("Executing!")

dbname_name = input("Enter the schema name to scan :\t")
table_name = input("Enter the table_name you want to scan:\t")
query = cursor.execute('Select * FROM '{0}' table '{1}'' .format(dbname_name,table_name))
dataframe =pd.read_sql(query, con=conn)

Visual studio 表示语法不正确。我应该怎么写呢?我是否也以与架构名称和 table 名称相同的方式提及列名称? 我正在使用 pyodbc

你不能直接使用这个语法 首先 运行 查询

Use [database_name]

然后运行查询

Select * from [table_name]

您的数据库名称存储在“dbname_name”中。
然后执行查询 'use ' + dbname_name

import pyodbc

conn = pyodbc.connect('Driver={SQL Server};'
                  'Server=ARUNTEST;'
                  'Database=PRODUCTDATABASESSAS;'
                  'Trusted_Connection=yes;')
schema_name = input("Enter the schema name to scan :\t")
table_name = input("Enter the table_name you want to scan:\t")
cursor = conn.cursor()
query = cursor.execute('Select * FROM {0}. 
{1}'.format(schema_name,table_name))
#cursor.execute('SELECT * FROM {0}'.format(table_name)) -> Use this if you 
want to call the table in default schema
for row in cursor:
print(row)

你能试试上面的修改吗?默认情况下,在您的连接字符串中,您连接到 Database Classic。如果 table 在默认模式中,那么模式名称也可以省略,查询应该类似于

select * 来自 table姓名

如果您想将它与架构一起使用,那么它应该是

select * 来自 schemaname.tablename <- 注意圆点