gpt4 book ai didi

Python 加载一组 .csv 文件到 MySQL

转载 作者:搜寻专家 更新时间:2023-10-30 21:41:31 24 4
gpt4 key购买 nike

我正在使用以下命令将多个 .csv 文件加载到 Mysql 数据库中,但我在(空闲窗口)上没有收到任何错误并且数据未加载

这是错误的脚本

#!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()

最佳答案

您需要将文件名插入到 SQL 字符串中;您只是将文字文​​本 file_name 发送到服务器。您可以为此使用 str.format() 方法,然后可以将任何 {} 占位符替换为您选择的变量。

您还必须tryexcept block 缩进到 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 变量。第一行的 {} 部分 (LOAD DATA LOCAL INFILE '{}') 在传递给MySQL 的 SQL 语句。

我还简化了文件名测试;据推测,如果文件名 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

关于Python 加载一组 .csv 文件到 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20868845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com