日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

postgresql 不同数据库不同模式下的数据迁移

發(fā)布時間:2023/12/10 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 postgresql 不同数据库不同模式下的数据迁移 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
編寫不容易,轉載請注明出處謝謝,

數據遷移

因為之前爬蟲的時候,一部分數據并沒有上傳到服務器,在本地。本來用的就是postgresql,也沒用多久,數據遷移的時候,也遇到了很多問題,第一次使pg_dump xx > filename進行數據備份遷移的時候,發(fā)現恢復后的數據,和原來的數據庫,模式一樣,后來這種方法就被我舍棄了。

后來想到把原來的數據庫中數據使用pandas導出來,再次存入新的數據庫中,可能有一點麻煩,但是我覺得這種方法挺好用的。下邊就介紹這種方法。

獲取需要遷移數據庫中模式下的所有表名

import pandas as pd import psycopg2# 連接數據庫 conn = psycopg2.connect(database='58TC',user='postgres',password='123456',host='127.0.0.1',port=5432) # 獲取模式下的所有表的名字 tables = pd.read_sql_query("select * from pg_tables where schemaname='2019_3_11'",con=conn) tables.head()

當前模式下的所有表

table_list = tables['tablename']

DataFrame中的數據寫入postgresql

此處我借鑒的網上的一種方法,原文是哪里,我已經忘記了,感謝他的分享,下次找到再補上去。因為單獨使用df.to_sql速度太慢了,我的數據想還挺大的,使用sqlalchemy和copy語句能大幅度提到寫入效率。

# df 寫入數據庫import io import pandas as pd from sqlalchemy import create_enginedef write_to_table(df, table_name, if_exists='fail'):db_engine = create_engine('postgresql://postgres:xxxxxx@XXXXX/***')# 初始化引擎# db_engine = create_engine('postgresql://user:password@host/database')# 初始化引擎string_data_io = io.StringIO() # 內存緩沖粗進行讀寫操作df.to_csv(string_data_io, sep='|', index=False)pd_sql_engine = pd.io.sql.pandasSQL_builder(db_engine)table = pd.io.sql.SQLTable(table_name, pd_sql_engine, frame=df,index=False, if_exists=if_exists,schema = '2019-3-11-particulars')table.create()string_data_io.seek(0)string_data_io.readline() # remove header# 連接數據庫with db_engine.connect() as connection:with connection.connection.cursor() as cursor: # 游標copy_cmd = '''COPY "2019-3-11-particulars"."%s" FROM STDIN HEADER DELIMITER '|' CSV''' %table_name# copy語句, 2019-3-11-particulars新數據庫中的模式名print(copy_cmd)cursor.copy_expert(copy_cmd, string_data_io) # 執(zhí)行語句connection.connection.commit()

pd.io.sql.pandasSQL_builder() PandasSQL子類
pd.io.sql.SQLTable() 用于將panda表映射到SQL表

參數說明:

  • table_name表名,
  • pd_sql_engine sql引擎,
  • framedf,
  • index,索引
  • if_exists,添加方式參數有
    append表存在追加, fail,表存在跳過, replace,表存在刪除重建
  • schema 模式名

到此為止,基本工作完成,最后就是調用函數,執(zhí)行遷移

for city_table in city_list:# 需要遷移的城市列表df = pd.read_sql_query('select * from "2019_3_12"."%s"' % city_table, con=conn)try:write_to_table(df,city_table)except Exception as e:print('c城市:',city_table,'錯誤',e)print(city_table,'導入完成') 原文鏈接: https://www.cnblogs.com/liqk/p/10682274.html 轉載請說明出處.

轉載于:https://www.cnblogs.com/liqk/p/10682274.html

總結

以上是生活随笔為你收集整理的postgresql 不同数据库不同模式下的数据迁移的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。