postgresql 不同数据库不同模式下的数据迁移
编写不容易,转载请注明出处谢谢,
数据迁移
因为之前爬虫的时候,一部分数据并没有上传到服务器,在本地。本来用的就是postgresql,也没用多久,数据迁移的时候,也遇到了很多问题,第一次使pg_dump xx > filename进行数据备份迁移的时候,发现恢复后的数据,和原来的数据库,模式一样,后来这种方法就被我舍弃了。
后来想到把原来的数据库中数据使用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_engine
def 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) # 执行语句
connection.connection.commit()
pd.io.sql.pandasSQL_builder()PandasSQL子类
pd.io.sql.SQLTable()用于将panda表映射到SQL表参数说明:
table_name表名,pd_sql_enginesql引擎,framedf,index,索引if_exists,添加方式参数有
append表存在追加, fail,表存在跳过, replace,表存在删除重建schema模式名
到此为止,基本工作完成,最后就是调用函数,执行迁移
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
转载请说明出处.
postgresql 不同数据库不同模式下的数据迁移的更多相关文章
- EntityFramework Code First 模式下使用数据迁移
启用数据迁移 在程序包管理控制台选择安装了EntityFramework的项目,键入如下指令以启EF用数迁移. Enable-Migrations 命令成功运行后,所选项目下会添加名为Migratio ...
- Oracle非归档模式下脱机数据文件
正常情况下,要想对数据文件脱机,必须在归档模式下,这是ORACLE自动保护的一种措施,防止在非归档模式下对数据文件脱机,造成数据丢失.如果想在非归档模式下执行数据文件脱机操作,则需要加上“for dr ...
- AXI总线slave模式下接收数据---verilog代码
AXI总线slave模式下接收数据---verilog代码 `timescale 1ns / 1ps ///////////////////////////////////////////////// ...
- Angularjs在360兼容模式下取数据缓存问题解决办法
测试提了一个bug,在360浏览器兼容模式下,删除页面数据需要手动刷新浏览器才能看到最新的数据.首先要复现当时的问题,很容易就复现了,但是发现在360浏览器兼容模式下无法打开开发者工具.好在经过反复重 ...
- 安卓开发笔记(十三):SQLite数据库储存(下)数据的增添,更改,删除,查询
SQLite数据库存储(下) 1.增添数据 对于添加数据的话我们只需要在主活动当中import新的包以及在主活动当中写上适当的代码就可以了,不需要在我们之前创建新的类当中书写新的代码.现在的主活动 ...
- 【 PostgreSQL】查询某模式下所有表的分布键信息
想看下某模式下所有表创建的分布键是否合理,查找系统表文档拼出如下sql,亲们如果有更好的sql或者意见欢迎留言! SELECT aaa.nspname AS "模式名", ...
- centos下mysql数据迁移方法
第一种: 原始数据库不需要重新安装: 默认mysql会安装在/var/lib/mysql这里,若将数据迁移到/data/mysql目录下,步骤如下: 1.停止mysql服务 2.#cp /var/li ...
- MVC模式下的数据展示:EasyUI的datagrid
我的数据库设计是一张老师表teacher,一张学生表student,一个教师对应多个学生,在学生一方建立外键; 还有一点想清楚,需要展示的数据是根据什么来的,是成功登陆的用户的id?还是直接展示所有的 ...
- centos下Elasticsearch数据迁移与备份
########### ### 共享创建es官方网站就一句话 ######## 1.下载 文件共享 .. rpm -i http://mirror.symnds.com/distributions ...
随机推荐
- 利用第三方类 phpmailer 发邮件
第一.百度一下 phpmailer 随便找个 girhub 网站 download 下来即可. 第二.复制如下代码放在项目根目录,填写完整你的账号信息,即可发送邮件.就是这么简单! <?php ...
- ES6学习笔记(十四)Generator函数
清明时节雨纷纷,路上行人欲断魂. 借问酒家何处有,牧童遥指杏花村. 二零一九年农历三月初一,清明节. 1.简介 1.1.基本概念 Generator 函数也是 ES6 提供的一种异步编程解决方案,据说 ...
- [Codeforces 841C]Leha and Function
题目大意:定义函数F(n,k)为[1,2,3,..n]中k个元素的子集中最小元素的数学期望.现在给你两个长度相等的数列A,B(A中元素严格大于B中元素),现在要你重新排列A,使得$\sum\limit ...
- Ubuntu上使用过的命令,Linux常用命令,mount 硬盘挂载, ls 列表list命令,cp 复制copy命令,mkdir 创建文件夹 ,nano 编辑器,cat 文档合并,chmod 文件权限,ssh win10连接ubuntu服务器的步骤
man 帮助 > man ls # ubuntu的帮助 tar.gz 压缩解压 > tar -zcvf yzn.tar.gz /home/yzn # 压缩 > tar -zxvf y ...
- Win10 + YOLOv3训练VOC数据集-----How to train Pascal VOC Data
How to train (Pascal VOC Data): Download pre-trained weights for the convolutional layers (154 MB): ...
- 紫书 习题 10-7 UVa 10539(long long + 素数筛)
注意要开long long 如果int * int会炸 那么久改成long long * int #include<cstdio> #include<vector> #incl ...
- 【Henu ACM Round#20 F】 Arthur and Brackets
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 所给的li,ri是左括号从左到右的顺序给的. (且注意长度是2*n 现在我们先把第一个左括号放在第1个位置. 然后考虑第二个位置. ...
- DOM基础及DOM操作HTML
文件对象模型(Document Object Model.简称fr=aladdin" target="_blank">DOM).是W3C组织推荐的处理可扩展标 ...
- swift具体解释之八---------------下标脚本
swift具体解释之八-----下标脚本 下标脚本 能够定义在类(Class).结构体(structure)和枚举(enumeration)这些目标中.能够觉得是訪问对象.集合或序列的快捷方式.不须要 ...
- ACM的算法分类 2015-04-16 14:25 22人阅读 评论(0) 收藏
初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. ...