在Python中将变量解析为sql语句
下面的insert语句允许我将sql查询解析为python文件,然后返回从查询中收集的数据的数据帧在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
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)
时,您可以准确地看到您正在传递的参数(这有助于处理包含更多参数的较长查询)。尝试使用(或该文章中提到的任何其他字符串格式)