我想加载包含大量sql查询(插入)的文本文件,并使用Python(PYODBC)执行它
我目前的代码如下:
cursor = cnxn.cursor()
with open('C:\Python_Script_Test\INSERTS.txt','r') as file:
var1 = file.read().replace("\r\n","")
var2 = var1
cursor.execute(var2)
file.close()
该文件中有超过5000行,其中的示例INSERT如下所示:
Insert into x (q, w, e, r, t, y, u, i, o, p, a, s, d, f, g, h, j)
VALUES (582, 'GA26', 'TMO ', 'xxx', 'xxx@example.com', '', 'NULL', 'NULL',
'', '', '', '', '', '', '', '', NULL);
错误:
pyodbc.ProgrammingError: ('42000',
"[42000] [MySQL][ODBC 3.51 Driver][mysqld-5.6.13]
You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near
'insert into x
(z, b, c, d, e' at line 3 (1064) (SQLExecDirectW)")
编辑:
Antoher的想法:
好的,这一刻没有错误。当前代码如下:
previous =''
对于打开的sql_insert('C:\ Python_Script_Test \ x.txt','r'):
y = sql_insert.strip()。replace(“\ r \ n”,“;”)
如果y.startswith('insert'):
打印上一个
如果previous.endswith(';'):
打印'test \ r \ n'
cursor.execute(先前)
previous = y
其他:
上一个+ = y
但是,数据库中的表格没有变化......
答案 0 :(得分:2)
我知道您必须使用Python,但不清楚您必须立即执行整个文件。由于您的输入文件已经分为几行,所以:
cursor = cnxn.cursor()
with open('C:\Python_Script_Test\INSERTS.txt','r') as inserts:
for statement in inserts:
cursor.execute(statement)
另外,在Python中使用file
作为变量名是一个坏主意,因为它会覆盖内置的file()
。
答案 1 :(得分:0)
您似乎忘了在)
和j
之间关闭VALUES
。
首先尝试使用供应商提供的专用SQL编辑器执行此类行。
我不确定MySQL ODBC是否能够一次执行多个语句。如果没有,那么你将不得不解析输入文件。如果每个INSERT
都在单独的文件中,则很容易:
for line in open(...):
sql_insert = line.strip()
if sql_insert:
cursor.execute(sql_insert)
如果没有,那么你必须以其他方式解析它。也许可以使用);
将其拆分为语句。这取决于您的输入文件。