[英]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()
您的代碼當前僅存儲最后一對,並將其寫入數據庫。 您需要在循環內調用fname
和lname
,並將每對分別寫入數據庫。
您可以將代碼修改為:
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;
我在這里做一些假設:
注意,我選擇了制表符分隔格式,因為我更喜歡它。 您可以將文件另存為.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.