我正在使用以下命令将多个.csv文件加载到Mysql数据库中,但我没有收到任何错误(IDLE窗口)并且数据未加载
这是错误的脚本
#!C:\Python27\python.exe
import MySQLdb
import os
import string
# Open database connection
db = MySQLdb.connect (host="localhost",port=3307,user="root",\
passwd="gamma123",db="test")
cursor=db.cursor()
l = os.listdir(".")
for file_name in l:
print file_name
cursor=db.cursor()
if (file_name.find("DIV.csv")>-1):
#Query under testing
sql = """LOAD DATA LOCAL INFILE file_name \
INTO TABLE system_work \
FIELDS TERMINATED BY ',' \
OPTIONALLY ENCLOSED BY '"' \
LINES TERMINATED BY '\r\n' \
IGNORE 1 LINES;;"""
try:
# Execute the SQL command
cursor.execute(sql)
# Commit your changes in the database
db.commit()
except:
# Rollback in case there is any error
db.rollback()
# disconnect from server
db.close()
但是当我尝试使用以下python脚本加载单个文件时,它的工作正常。 请帮帮....
#!C:\Python27\python.exe
import MySQLdb
import os
import string
# Open database connection
db = MySQLdb.connect (host="localhost",port=3307,user="root",\
passwd="gamma123",db="test")
cursor=db.cursor()
#Query under testing
sql = """LOAD DATA LOCAL INFILE 'Axle.csv' \
INTO TABLE system_work \
FIELDS TERMINATED BY ',' \
OPTIONALLY ENCLOSED BY '"' \
LINES TERMINATED BY '\r\n' \
IGNORE 1 LINES;;"""
try:
# Execute the SQL command
cursor.execute(sql)
# Commit your changes in the database
db.commit()
except:
# Rollback in case there is any error
db.rollback()
# disconnect from server
db.close()
答案 0 :(得分:6)
您需要将文件名插入到SQL字符串中;您只是将文字文本file_name
发送到服务器。您可以使用str.format()
方法,然后可以使用您选择的变量替换任何{}
占位符。
您必须缩进try
和except
块,使其位于for
循环中:
sql = """LOAD DATA LOCAL INFILE '{}'
INTO TABLE system_work
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\\r\\n'
IGNORE 1 LINES;;"""
for file_name in l:
print file_name
if file_name.endswith('DIV.csv'):
try:
cursor = db.cursor()
cursor.execute(sql.format(file_name))
db.commit()
except Exception:
# Rollback in case there is any error
db.rollback()
cursor.execute()
方法传递sql
字符串并插入file_name
变量。在将SQL语句传递给MySQL之前,第一行({}
)上的LOAD DATA LOCAL INFILE '{}'
部分将被file_name
中的值替换。
我还简化了文件名测试;假设文件名以DIV.csv
结束就足够了。
请注意,使用mysqlimport
utility可能更容易;你可以用以下方法获得完全相同的结果:
mysqlimport --fields-terminated-by=, --fields-optionally-enclosed-by=\" \
--local --lines-terminated-by=\r\n --user=root --password=gamma123 \
test *DIV.csv
答案 1 :(得分:1)
if (file_name.find("DIV.csv")>-1):
除非你的所有文件都被实际调用,否则DIV.csv应该是if (file_name.find(".csv")>-1):
(这可能会更有效地测试文件名的最后四个字母)