Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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
Sql server pyodbc的参数化创建查询_Sql Server_Pandas_Pyodbc - Fatal编程技术网

Sql server pyodbc的参数化创建查询

Sql server pyodbc的参数化创建查询,sql-server,pandas,pyodbc,Sql Server,Pandas,Pyodbc,我试图使用参数化查询来避免pyodbc的SQL注入;基于以下链接中指定的文档: 以下是数据帧: In [57]: df Out[57]: TXN_KEY SEND_AGENT PAY_AGENT 0 13273870 ANO080012 API352676 1 13274676 AUK359401 AED002782 2 13274871 ACL000105 ACB020203 3 13275398 AED420

我试图使用参数化查询来避免pyodbc的SQL注入;基于以下链接中指定的文档:

以下是数据帧:

    In [57]: df
 Out[57]:
            TXN_KEY SEND_AGENT  PAY_AGENT
0     13273870  ANO080012  API352676
1     13274676  AUK359401  AED002782
2     13274871  ACL000105  ACB020203
3     13275398  AED420319  ASE094882
4     13278566  ARA030210  AII071196
5     13278955  AYM003098  AHX012817
6     13280334  AJ5020114  AED000438
7     13280512  A11171047  AEL051943
8     13281278  AOG010045  ADJ031448
9     13282118  AMX334165  APM033226
10    13283955  APL170095  AE4082002

 x=df.columns.tolist()
 x
 Out[59]: [u'TXN_KEY', u'SEND_AGENT', u'PAY_AGENT']
下面是在sql server数据库中创建表的游标命令:

    cursor.execute("""Create table result (?  bigint  PRIMARY KEY  , ?  varchar(9), ?  varchar(9))""",x[0],x[1],x[2])

    ProgrammingError: ('42000', "[42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near '@P1'. (102) (SQLExecDirectW)")
但是


等等。类似地,我还需要为ALTERTABLEADD列编写一个带有参数化查询的游标。我知道如何进行插入、更新和选择。我认为这可能是类似的,但显然不是。

这很难看,但因为您没有将参数绑定到列,所以需要执行类似的操作(我已经测试过):


我强烈建议在深入研究pyodbc之前,先学习更多关于pyodbc的知识。更新的文档就在这里,谷歌代码中的任何内容都已经过时了:它记录了您需要执行的选择、插入、删除和更新操作。最后三个需要一个
commit()
语句。祝你好运

您只能将参数用于

除了文字,不能将其用于表名、列名或SQL的任何其他部分

除此之外,您不能也不应该将其用于s-like
create table
alter table
,等等

但是您应该对SELECT/INSERT/UPDATE/DELETE语句使用参数化查询

    x[0]
    Out[63]: u'TXN_KEY'...
cursor.execute("""Create table result ({} bigint PRIMARY KEY, {} varchar(9), {} varchar(9))""".format(x[0], x[1], x[2]))