[英]Export all the tables in the database into a single csv file in python
我一直在嘗試將數據庫中的所有表導出到單個csv文件中。
import MySQLdb as dbapi
import sys
import csv
import time
dbname = 'site-local'
user = 'root'
host = '127.0.0.1'
password = ''
date = time.strftime("%d-%m-%Y")
file_name = date+'-portal'
query='SELECT * FROM site-local;' //<---- I'm stuck here
db=dbapi.connect(host=host,user=user,passwd=password)
cur=db.cursor()
cur.execute(query)
result=cur.fetchall()
c = csv.writer(open(file_name+'.csv','wb'))
c.writerow(result)
我現在有些困惑,希望有人能為我的知識打下基礎。
使用python並不是解決這個問題的方法。 最簡單的解決方案是使用SELECT INTO OUTFILE 。 這樣可以將非常大的表快速轉儲為CSV格式,而無需在python代碼中打擾CSV編寫器。
從您的其他問題中,我知道您進行轉儲的原因是重新導入到postgresql中。 如果不是這樣,則可以只使用mysqldump
命令立即轉儲整個數據庫。
如果要以CSV格式轉儲每個表,則確實需要一些代碼。 創建一個python循環以遍歷所有表,然后對每個表執行SELECT INTO查詢。
考慮以迭代方式導出所有數據庫表的SHOW CREATE TABLE
(txt文件)和SELECT * FROM
(csv文件)輸出。 從先前的相關問題中,由於需要遷移數據庫,因此您可以運行create table語句(將MySQL調整為Postgre語法,例如ENGINE=InnoDB
行),然后使用PostgreSQL的COPY
命令通過csv導入數據。 下面的csv文件包含fetchall()
未包含的表列標題。
db = dbapi.connect(host=host,user=user,passwd=password)
cur = db.cursor()
# RETRIEVE TABLES
cur.execute("SHOW TABLES")
tables = []
for row in cur.fetchall():
tables.append(row[0])
for t in tables:
# CREATE TABLES STATEMENTS
cur.execute("SHOW CREATE TABLE `{}`".format(t))
temptxt = '{}_table.txt'.format(t)
with open(temptxt, 'w', newline='') as txtfile:
txtfile.write(cur.fetchone()[1]) # ONE RECORD FETCH
txtfile.close()
# SELECT STATEMENTS
cur.execute("SELECT * FROM `{}`".format(t))
tempcsv = '{}_data.csv'.format(t)
with open(tempcsv, 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow([i[0] for i in cur.description]) # COLUMN HEADERS
for row in cur.fetchall():
writer.writerow(row)
csvfile.close()
cur.close()
db.close()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.