使用Python将JSON数据插入SQL Server

使用Python将JSON数据插入SQL Server,python,sql,sql-server,json,Python,Sql,Sql Server,Json,我有一个python脚本,它调用API,提交请求,然后将结果插入Sql Server 2012表中。当它执行insert-into-SQL时,它会中断。我目前正在将json、请求和pyodbc导入该文件。以下是其断裂的位置: conn = pyodbc.connect('DRIVER={SQL Server};SERVER={localServer};DATABASE={localDB}') cursor = conn.cursor() for record in response: p

我有一个python脚本,它调用API,提交请求,然后将结果插入Sql Server 2012表中。当它执行insert-into-SQL时,它会中断。我目前正在将json、请求和pyodbc导入该文件。以下是其断裂的位置:

conn = pyodbc.connect('DRIVER={SQL Server};SERVER={localServer};DATABASE={localDB}')
cursor = conn.cursor()
for record in response:
    print(json.dumps(record))
    cursor.execute("Insert Into Ticket_Info values ?", json.dumps(record))
    cursor.commit()
cursor.close()
conn.close()
它位于cursor.execute()行,在该行中发生中断。这是我尝试运行此操作时遇到的错误

pyodbc.ProgrammingError:('42000',“[42000][Microsoft][ODBC SQL “@P1”附近的服务器驱动程序][SQL Server]语法不正确。(102) (SQLExecDirectW);[42000][Microsoft][ODBC SQL Server驱动程序][SQL 无法准备服务器]语句。(8180)


如果我能得到任何帮助,我将不胜感激。目前我已经搜索并尝试了几种不同的方法,唯一改变的是错误。

cursor.execute()的第二个参数必须是一系列要插值的值,语句中的每个SQL参数对应一个值

您为ODBC提供了一个字符串,它也是一个序列,但包含的元素(字符)比查询所需的多(多)

在此处使用单个元素元组:

cursor.execute("Insert Into Ticket_Info values (?)", (json.dumps(record),))
我还在values部分加了括号,如下所示:


介绍要插入的一个或多个数据值列表。如果指定,列列表或表格中的每列必须有一个数据值。值列表必须用括号括起来。

除非
Ticket\u Info
每行只有一列(不太可能,至少有一个主键列),否则您可能需要指定要将值插入的列:

cursor.execute("Insert Into Ticket_Info (<columnname>) values (?)", (json.dumps(record),))
cursor.execute(“插入票证信息()值(?),(json.dumps(记录),)

您需要将
替换为表中的实际列名。

我再次执行脚本,作为:'for record in response:print(json.dumps(record))cursor.execute(“Insert Into Ticket_Info values?”,(json.dumps(record),))cursor.commit()cursor.close()conn.close()“我仍然遇到同样的错误。@William:我现在也解决了第二个问题;
值之后的括号是必需的。
太棒了!我已经消除了那个错误,但现在我有了一个新错误。pyodbc.error:('21S01','[21S01][Microsoft][ODBC SQL Server驱动程序][SQL Server]提供的值的列名或数目与表定义不匹配。(213)(SQLExecDirectW);[42000][Microsoft][ODBC SQL Server驱动程序][SQL Server]语句无法准备。(8180)“有什么想法吗?@William:您没有指定列列表;
插入到票证信息()值(?)
@William:您必须将每个条目转换为与每行列名匹配的参数序列;对于空列,请使用
None
。对于多个插入,您可以使用
executemany()
(使用嵌套结构)。