如何在python中将用户输入数据传递到SQL语法

如何在python中将用户输入数据传递到SQL语法,python,sql,Python,Sql,我想通过pandas将用户输入变量传递给SQL。通过使用pycharm IDE 2020.2版和Microsoft SQL Server 2019之间的连接读取\u SQL\u query,如下代码所示: InputID = int(input('Give me your input MeterpointID: ')) OccurDate = input('What is the beginning occurrence datetime (yyyy-mm-dd hh:mm:ss):') S

我想通过
pandas将用户输入变量传递给SQL。通过使用pycharm IDE 2020.2版和Microsoft SQL Server 2019之间的连接读取\u SQL\u query
,如下代码所示:

InputID = int(input('Give me your input MeterpointID: ')) 
OccurDate = input('What is the beginning occurrence datetime (yyyy-mm-dd hh:mm:ss):') 
SQL_Query = pd.read_sql_query('select * from tblprofilewhimp_norm where 
MeterpointID = InputID and Date_M > \'OccurDate\'', conn)
但是,此代码不起作用,IDE向我显示了如下错误:

pandas.io.sql.DatabaseError:在sql“select*from”上执行失败 tblprofilewhimp\u norm,其中MeterpointID=InputID和Date\u M> '占用日期':('42S22',“[42S22][Microsoft][SQL Server的ODBC驱动程序17] [SQL Server]列名“InputID”无效。(207)(SQLExecDirectW)“)

那么,你能告诉我如何处理这个问题吗


提前感谢。

使用格式字符串连接字符串和变量:

SQL_Query = pd.read_sql_query('select * from tblprofilewhimp_norm where MeterpointID = {} and Date_M > \'{}\''.format(InputID, OccurDate), conn)

您需要查找SQL库使用的占位符格式,然后将值作为
params
参数传递给
pd.read\u SQL\u query

假设SQL库为pyodbc,占位符格式为
,语法为:

SQL_Query = pd.read_sql_query(
    'select * from tblprofilewhimp_norm where MeterpointID = ? and Date_M > ?',
    conn,
    params=(InputID, OccurDate),
)

请修复代码格式。错误表明列
InputID
不存在。你能发一份数据样本吗?非常感谢,先生。解释得很清楚。不,请不要这样做;这是一个巨大的安全漏洞。相反,使用SQL库提供的占位符机制;在任何时候使用格式字符串(或等效字符串)创建SQL语句时都要非常偏执,这是一个好习惯。有时这是不可避免的,但风险总是很高的。在
params
参数中传递变量要安全得多。