0

我有一个包含许多 mysql 插入(150 万)的 txt 文件。我需要用 python 读取这个文件,并在每个 ';' 处划分这个文件 对于每个查询并使用 python 运行查询。我怎样才能在每个';'处划分这个文件?并用 python 运行查询?到目前为止,我的代码是:

import MySQLdb

db = MySQLdb.connect(host = "localhost",
                     user="root",
                     passwd="da66ro",
                     db="test")

f = open('E:/estudos/projetos/tricae/tests_python.txt')
4

3 回答 3

1

首先打开文件:

with open('youfilename.sql', 'r') as f:
    fileAsString = f.read().replace("\n", "")

sqlStatements = fileAsString.split(";")

然后运行查询:

cursor = db.cursor()
for statement in sqlStatements:
    try:
        cursor.execute(statement)
        db.commit()
    except:     
        db.rollback()

但当然你必须意识到这是一个可怕的想法。当您引用“;”时会发生什么 您要插入的字符串中的字符?你必须比你提出的问题更聪明一点——一般来说,假设任何关于你要插入数据库的数据都是一个糟糕的主意。

甚至比查询中断更糟糕:恶意代码呢?SQL注入?永远不要相信你没有清理过的输入。

于 2013-04-11T05:31:41.017 回答
0

好的,所以,首先你需要读取文件并用“;”分割它,这是用split()函数完成的。然后您可以循环或选择要执行的查询(或只执行整个文件而不拆分)。您可以在其中找到许多示例,我相信将它们组合成您需要的东西会很容易。

我需要用 python 读取这个文件,在每个 ';' 处划分这个文件 对于每个查询并使用 python 运行查询

于 2013-04-11T01:43:48.850 回答
0

我是python新手..这是解决方法

import io

myfile = open('69_ptc_group_mappingfile_mysql.sql')

data = (myfile.read().decode("utf-8-sig").encode("utf-8")).lower()

query_list=[]

if 'delimiter' not in data:

query_list = (data.strip()).split(";")

else:

tempv =  (data.rstrip()).split('delimiter')
for i in tempV:
    if (i.strip()).startswith("//"):
        i = i.rstrip().split("//")
        for a in i:
            if len(a)!=0:
                query_list.append(a.strip())
    else:
        corr = ((i.rstrip()).split(";"))
        for i in corr:
            if len(i.rstrip())!=0:
                query_list.append(i.rstrip())

打印查询列表

对于 query_list 中的 j:cursor.execute(j)

于 2014-12-09T11:38:15.667 回答