簡體   English   中英

將數據庫中的所有表導出到python中的單個csv文件中

[英]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.

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