使用Python将JSON数据插入SQL Server
我有一个python脚本,它调用API,提交请求,然后将结果插入Sql Server 2012表中。当它执行insert-into-SQL时,它会中断。我目前正在将json、请求和pyodbc导入该文件。以下是其断裂的位置:使用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
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()
(使用嵌套结构)。