使用python从文本文件插入到mysql表中

时间:2017-07-26 18:16:28

标签: python mysql

import MySQLdb

db = MySQLdb.connect(host="?",   
                 user="root",        
                 passwd="?",  
                 db="test")
cursor = db.cursor()

file = open('...../EM.txt', 'r')
file_content = file.read()
file.close()

query = "INSERT INTO EM VALUES (%s,%s,%s,%s,%s,%s)"

cursor.execute(query, (file_content,))

db.commit()
db.close()

我已尝试使用此代码从文本文件中读取并插入EM表...任何人都可以帮我完成这项工作吗?

3 个答案:

答案 0 :(得分:2)

您是否尝试将整个文本文件插入数据库中的字符串列,或者是否要将表格数据导入数据库?您似乎希望根据指定值的方式导入表格数据,因此我将使用它作为我的假设。

要执行此操作,您需要从文件中读取每一行,并将其一次一行插入数据库。您还需要更新查询语法以指定要插入的列名称。

import csv
import MySQLdb

db = MySQLdb.connect(host='localhost',
    user='root',
    passwd='?',
    db='test')
cursor = mydb.cursor()

with open('...../EM.txt') as f:
    reader = csv.reader(f)
    for row in reader:
        cursor.execute("""INSERT INTO testcsv(col1, col2, col3, col4, col5, col6)
                          VALUES(%s, %s, %s, %s, %s, %s)
                       """, row)

#close the connection to the database.
mydb.commit()
cursor.close()
print "Done"

答案 1 :(得分:1)

我不知道您的文本文件是如何格式化的,但是file.read()会将整个文件作为单个字符串提供给您,看起来您要填充六个字段。那么这个文件可能包含6个制表符或空格分隔的字段?

首先,将文件拆分为file.readlines()而非file.read()的行。接下来,构建一个可以输入executemany的行列表:

values = [line.split() for line in file_content]
cursor.executemany(query, values)

split方法将空白文件中的行拆分为元组,例如,将字符串a b c转换为元组('a', 'b', 'c'),以便列表推导生成列表可以输入cursor.executemany以执行批量插入的元组。

正如@Evan指出的那样,您还必须在SQL查询中指定值与之关联的列,例如,

INSERT INTO EM (field, spam, ham, eggs, price, ni) VALUES (%s, %s, %s, %s, %s, %s)

答案 2 :(得分:-1)

要开始使python与您的SQl数据库通信,您必须使用psycopg2等适配器。一旦安装了psycopg2,就必须导入它。另一个可以提高代码简单性和功能的部分是使用csv阅读器。这可以通过简单地导入csv来完成。 SQL数据库存储为csv文件,因此使用它可以帮助您在使用python时读取csv文件。

您可以在此处找到有关使用csv阅读器的更多信息: https://docs.python.org/2/library/csv.html

就您的代码而言,请尝试以下方法:

import MySQLdb
import psycopg2

db = MySQLdb.connect(host="?",   
                 user="root",        
                 passwd="?",  
                 db="test")
cursor = db.cursor()

file = open('...../EM.txt', 'r')
file_content = file.read()
file.close()

query = "INSERT INTO EM VALUES (%s,%s,%s,%s,%s,%s)"

cursor.execute(query, (file_content,))

db.commit()
db.close()

通过安装和导入psycopg2将允许python了解您尝试执行的SQL quires。