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 ...
随机推荐
- 在 Ubuntu 18.04 LTS 无头服务器上安装 Oracle VirtualBox
作者: Sk 译者: LCTT qhwdw | 2018-10-12 01:59 本教程将指导你在 Ubuntu 18.04 LTS 无头服务器上,一步一步地安装 Oracle VirtualBox. ...
- Git 内部原理 - (5)引用规格 (6) 传输协议
引用规格 纵观全书,我们已经使用过一些诸如远程分支到本地引用的简单映射方式,但这种映射可以更复杂. 假设你添加了这样一个远程版本库: $ git remote add origin https://g ...
- 为什么使用Nginx & Nginx的使用
Nginx在Windows平台的配置: 什么是Nginx? 根据前面的对比,我们可以了解到Nginx是一个http服务器.是一个使用c语言开发的高性能的http服务器及反向代理服务器.Nginx是一款 ...
- CSU 1374 Restore Calculation 数位DP
题意: 给你三个数A, B, C(没有前导0),但是其中某些位不知道. 问A+B=C成立有多少种情况. 思路: 从最后一位往前推,枚举A, B的每一种情况,考虑进位和不进位两种情况. 代码: #inc ...
- IOS开发之蘑菇街框架
近期公司的项目全然仿了蘑菇街client的框架,自己从网上找了一下,没有发现源代码.问遍各大QQ群也没有结果.上周五晚上一直在思考这个框架怎样搭建,周六早上有了灵感.写了一半.今天接着完好了一下. 在 ...
- linux(debian/ubuntu)下连接安卓手机--小米4为例
更改:如今小米连接Ubuntu等Linux系统,直接改动手机上的连接方式就可以. --------------------------------------------- 因为安卓手机底层就是lin ...
- SSH之IDEA2017整合Struts2+Spring+Hibernate
转自:https://blog.csdn.net/sysushui/article/details/68937005
- sqlserver bulk insert
开启功能 -- To allow advanced options to be changed. EXEC sp_configure 'show advanced options', 1 GO -- ...
- JAVA学习书籍
1 java编程思想(第四版) 2 head first servlet &jsp
- 【Henu ACM Round#14 A】Vitaly and Night
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 连续两个如果不全是0就递增cnt [代码] #include <bits/stdc++.h> using namespa ...