执行从文件中读取的sql语句

时间:2013-09-10 11:25:44

标签: python mysql sql insert pyodbc

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

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

2 个答案:

答案 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)

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