在Python中将变量解析为sql语句

在Python中将变量解析为sql语句,python,sql,Python,Sql,下面的insert语句允许我将sql查询解析为python文件,然后返回从查询中收集的数据的数据帧 params = 'DRIVER={ODBC Driver 13 for SQL Server};' \ 'SERVER=localhost;' \ 'PORT=XXX;' \ 'DATABASE=database_name;' \ 'UID=XXX;' \ 'PWD=XXX;' params = urllib.parse.quote

下面的insert语句允许我将sql查询解析为python文件,然后返回从查询中收集的数据的数据帧

   params = 'DRIVER={ODBC Driver 13 for SQL Server};' \
     'SERVER=localhost;' \
     'PORT=XXX;' \
     'DATABASE=database_name;' \
     'UID=XXX;' \
     'PWD=XXX;'

   params = urllib.parse.quote_plus(params)

   db = create_engine('mssql+pyodbc:///?odbc_connect=%s' % params)

   sql = '''
   select * from table_name
   where column_name= variable_in_python
   '''

   dataframe = pd.read_sql_query(sql, db)
现在,在'where'语句之后,我想要有一个在Python中声明的变量,例如id号(假设为1123581321)。这个变量需要放在“variable_python”的地方

我试过:

   import pyodbc as py
   import urllib
   from sqlalchemy import create_engine
   import pandas as pd 

   x = 1123581321

   params = 'DRIVER={ODBC Driver 13 for SQL Server};' \
     'SERVER=localhost;' \
     'PORT=XXX;' \
     'DATABASE=database_name;' \
     'UID=XXX;' \
     'PWD=XXX;'

   params = urllib.parse.quote_plus(params)

   db = create_engine('mssql+pyodbc:///?odbc_connect=%s' % params)

   sql = '''
   select * from table_name
   where column_name= 'x'
   '''

   dataframe = pd.read_sql_query(sql, db)
这显然行不通。但我一点也不知道如何做到这一点(如果可以做到的话)


欢迎提出任何建议

您可以执行以下操作:

sql = '''
   select * from table_name
   where column_name= {}
   '''.format(variable_in_python)

有关更多信息,请查看您可以在查询中使用
作为参数,并将该值作为参数传递给
读取sql\u查询
函数:

sql = '''
select * from table_name
where column_name= ?
'''

dataframe = pd.read_sql_query(sql, db, params=(variable_in_python,))

我喜欢@blhsing的答案

另一种方法是f字符串。我特别喜欢它们,因为它们使东西可读性很强

例如:

# Query Parameters
column_name = 'x'
然后:

sql = f'''
select * from table_name
where column_name= {column_name}
'''
您可以更进一步,使用参数字典,并在f字符串本身中按键调用每个参数。这种方法的优点是,如果您有很多参数用于更长更复杂的查询,那么您总是可以参考字典。另一个问题是,在这种情况下,当您执行
打印(sql)
时,您可以准确地看到您正在传递的参数(这有助于处理包含更多参数的较长查询)。

尝试使用(或该文章中提到的任何其他字符串格式)