Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python中的参数正确执行MSSQL存储过程_Python_Sql Server_Python 3.x_Sqlalchemy_Sql Injection - Fatal编程技术网

如何使用Python中的参数正确执行MSSQL存储过程

如何使用Python中的参数正确执行MSSQL存储过程,python,sql-server,python-3.x,sqlalchemy,sql-injection,Python,Sql Server,Python 3.x,Sqlalchemy,Sql Injection,目前,我正在以这种方式执行存储过程: engine = sqlalchemy.create_engine(self.getSql_conn_url()) query = "exec sp_getVariablesList @City = '{0}', @Station='{1}'".format(City, Station) self.Variables = pd.read_sql_query(query, engine) 但是at被正确地注意到,这使得它对SQL注入开放。

目前,我正在以这种方式执行存储过程:

engine = sqlalchemy.create_engine(self.getSql_conn_url())
query = "exec sp_getVariablesList @City = '{0}', @Station='{1}'".format(City, Station)
self.Variables = pd.read_sql_query(query, engine)

但是at被正确地注意到,这使得它对SQL注入开放。我尝试了不同的方法,但没有成功。那么,我应该如何将参数传递给MSSQL存储过程以消除SQL注入的风险呢?这可以通过sqlalchemy或任何其他方式实现。

使用“命名”参数样式编写SQL命令文本,将其包装在sqlalchemy
text()
对象中,并以dict形式传递参数值:

将熊猫作为pd导入
将sqlalchemy作为sa导入
连接_uri=“mssql+pyodbc://@mssqlLocal64”
引擎=sa.创建引擎(连接uri)
#使用“命名”参数样式的SQL命令文本
sql=”“”
不计数;
设置ARITHABORT;
EXEC dbo.breaken@name=:name_param,@food=:food_param;
"""
#参数值
param_values={“name_param”:“Gord”,“food_param”:“bacon”}
#执行SQLAlchemy text()对象中包装的查询
df=pd.read\u sql\u查询(sa.text(sql),引擎,params=param\u值)
打印(df)
"""
专栏1
戈德早餐喜欢吃熏肉。
"""

使用“命名”参数样式编写SQL命令文本,将其包装在SQLAlchemy
text()
对象中,并将参数值作为dict传递:

将熊猫作为pd导入
将sqlalchemy作为sa导入
连接_uri=“mssql+pyodbc://@mssqlLocal64”
引擎=sa.创建引擎(连接uri)
#使用“命名”参数样式的SQL命令文本
sql=”“”
不计数;
设置ARITHABORT;
EXEC dbo.breaken@name=:name_param,@food=:food_param;
"""
#参数值
param_values={“name_param”:“Gord”,“food_param”:“bacon”}
#执行SQLAlchemy text()对象中包装的查询
df=pd.read\u sql\u查询(sa.text(sql),引擎,params=param\u值)
打印(df)
"""
专栏1
戈德早餐喜欢吃熏肉。
"""

您尝试过哪些代码,为什么不适合您?(错误消息?)?您可以通过
params
元组传递参数。@AlwaysLearning我试图按照(调用存储过程)中的描述来传递参数,但收到错误:“pyodbc.Cursor”对象没有属性“callproc”,您尝试了哪些代码,为什么不适合您?(错误消息?)?您可以通过
params
元组传递参数。@AlwaysLearning我试图按照(调用存储过程)中的描述进行传递,但收到错误:“pyodbc.Cursor”对象没有属性“callproc”谢谢,这就是我需要的!谢谢你,这就是我需要的!