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表...任何人都可以帮我完成这项工作吗?
答案 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。