簡體   English   中英

從Excel導入到MySQL

[英]importing from excel to mysql

我正在嘗試將數據從excel導入MySQl,這是我的代碼,這里的問題是它僅將excel表的最后一行寫入MySQl db,我希望它從excel表導入所有行。

import pymysql
import xlrd

book = xlrd.open_workbook('C:\SqlExcel\Backup.xlsx')
sheet = book.sheet_by_index(0)

# Connect to the database
connection = pymysql.connect(host='localhost',
                             user='root',
                             password='',
                             db='test')



cursor = connection.cursor()
query = """INSERT INTO report_table (FirstName, LastName) VALUES (%s, %s)"""

for r in range(1, sheet.nrows):
        fname   = sheet.cell(r,1).value
        lname   = sheet.cell(r,2).value


values = (fname, lname)

cursor.execute(query, values)
connection.commit()
cursor.close()
connection.close()

您的變量值必須在for指令內,如下所示:

import pymysql
import xlrd
book = xlrd.open_workbook('C:\SqlExcel\Backup.xlsx')
sheet = book.sheet_by_index(0)

# Connect to the database
connection = pymysql.connect(host='localhost',
                             user='root',
                             password='',
                             db='test')



cursor = connection.cursor()
query = """INSERT INTO report_table (FirstName, LastName) VALUES (%s, %s)"""

for r in range(1, sheet.nrows):
        fname   = sheet.cell(r,1).value
        lname   = sheet.cell(r,2).value
        values = (fname, lname)
        cursor.execute(query, values)

connection.commit()
cursor.close()
connection.close()

抱歉,我對數據庫了解不多,對pymysql也了解不多。 但是假設所有其余的都是正確的,我它可以像這樣工作:

...
cursor = connection.cursor()
query = """INSERT INTO report_table (FirstName, LastName) VALUES (%s, %s)"""

for r in range(1, sheet.nrows):
        fname   = sheet.cell(r,1).value
        lname   = sheet.cell(r,2).value

        values = (fname, lname)
        cursor.execute(query, values)


connection.commit()
cursor.close()
connection.close()

您的代碼當前僅存儲最后一對,並將其寫入數據庫。 您需要在循環內調用fnamelname ,並將每對分別寫入數據庫。

您可以將代碼修改為:

import pymysql
import xlrd

book = xlrd.open_workbook('C:\SqlExcel\Backup.xlsx')
sheet = book.sheet_by_index(0)

# Connect to the database
connection = pymysql.connect(host='localhost',
                             user='root',
                             password='',
                             db='test',
                             autocommit=True)

cursor = connection.cursor()
query = """INSERT INTO report_table (FirstName, LastName) VALUES (%s, %s)"""

# loop over each row
for r in range(1, sheet.nrows):
    # extract each cell
    fname   = sheet.cell(r,1).value
    lname   = sheet.cell(r,2).value

    # extract cells into pair
    values = fname, lname

    # write pair to db
    cursor.execute(query, values)

# close everything
cursor.close()
connection.close()

注意:您可以在連接階段設置autocommit=True PyMySQL默認禁用自動提交。 這意味着您不必在查詢后調用cursor.commit()

您會定期執行此操作嗎? 我看到了您正在編寫的腳本,但是我不確定這是否需要一遍又一遍地運行,還是只是一次將數據導入到MySQL中。

如果這是一筆交易,您可以嘗試一下。

打開電子表格並全選,然后復制所有數據。 將其粘貼到文本文檔中並保存該文本文檔(假設該文本文檔位於c:\\ temp \\ exceldata.txt中)。 然后,您可以使用一個命令將其全部加載到表中:

LOAD DATA INFILE 'c:/temp/exceldata.txt'
INTO TABLE report_table
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;

我在這里做一些假設:

  1. 電子表格只有兩列,它們與表中字段的順序相同。
  2. 您無需在加載前清除表。 如果這樣做,則發出命令TRUNCATE TABLE report_table; 在加載之前。

注意,我選擇了制表符分隔格式,因為我更喜歡它。 您可以將文件另存為.CSV文件,並按如下所示調整命令:

LOAD DATA INFILE 'c:/temp/exceldata.txt'
INTO TABLE report_table
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;

出現“可選地由...括起來”是因為Excel會在文本數據中加上引號,並在其中加上逗號。

如果您需要定期執行此操作,則仍然可以通過編寫一個Excel腳本來使用CSV方法,該腳本可以在保存電子表格時將文件保存到.CSV副本。 我也這樣做了。

我從未寫過python,但這就是我在PHP中所做的事情。

高溫超導

在上述建議的幫助下,這段代碼為我工作了,錯誤是縮進,現在可以正常工作了:)

import pymysql
import xlrd

book = xlrd.open_workbook('C:\SqlExcel\Backup.xlsx')
sheet = book.sheet_by_index(0)

# Connect to the database
connection = pymysql.connect(host='localhost',
                             user='root',
                             password='',
                             db='test',
                             autocommit=True)



cursor = connection.cursor()
query = """INSERT INTO report_table (FirstName, LastName) VALUES (%s, %s)"""

for r in range(1, sheet.nrows):


        fname   = sheet.cell(r,1).value
        lname   = sheet.cell(r,2).value
        values = (fname, lname)
        cursor.execute(query, values)




cursor.close()
connection.close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM