【问题标题】:Python loading a set of .csv files into MySQLPython 将一组 .csv 文件加载到 MySQL
【发布时间】:2014-01-19 01:38:37
【问题描述】:

我正在使用以下命令将多个 .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()

【问题讨论】:

    标签: python mysql sql database csv


    【解决方案1】:

    if (file_name.find("DIV.csv")>-1): 除非您的所有文件实际上都称为 DIV.csv,否则应该是 if (file_name.find(".csv")>-1):(顺便说一下,测试文件名的最后四个字母可能会更有效)

    【讨论】:

      【解决方案2】:

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

      您还必须tryexcept 块缩进到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
      

      【讨论】:

        猜你喜欢
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-17
        • 1970-01-01
        • 2012-04-26
        • 2014-07-08
        • 2013-01-17
        相关资源
        最近更新 更多