1

我想加载包含大量 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)")

编辑:

另一个想法:

好的,目前没有错误。当前代码如下所示:previous = '' for sql_insert in open('C:\Python_Script_Test\x.txt','r'): y = sql_insert.strip().replace("\r\n",";" )
if y.startswith('insert'):
print previous if previous.endswith(';'): print 'test\r\n' cursor.execute(previous)
previous = y
else: previous += y

但是,数据库中的表没有变化......

4

2 回答 2

2

我知道您必须使用 Python,但不清楚您必须一次执行整个文件。由于您的输入文件已经分为几行,那么:

cursor = cnxn.cursor()
with open('C:\Python_Script_Test\INSERTS.txt','r') as inserts:
    for statement in inserts:
        cursor.execute(statement)

此外,file在 Python 中用作变量名是一个坏主意,因为它会覆盖file()内置的。

于 2013-09-10T12:32:20.100 回答
0

似乎您忘记了在and)之间关闭。jVALUES

首先尝试使用供应商提供的专用 SQL 编辑器执行这样的行。

我不确定 MySQL ODBC 是否能够一次执行许多语句。如果没有,那么您将不得不解析输入文件。如果每个INSERT文件都在单独的文件中,则很容易:

for line in open(...):
    sql_insert = line.strip()
    if sql_insert:
        cursor.execute(sql_insert)

如果不是,那么您必须以其他方式解析它。也许通过使用将其拆分为语句);。这取决于您的输入文件。

于 2013-09-10T11:29:05.723 回答