postgresql中的表和mysql中的表结构不一样,过程中做点转换,特别是datetime的insert
还有activated 字段在原表中是布尔型,mysql表中是tinyint型
import psycopg2 import MySQLdb import datetime, time psycopg2_conn = psycopg2.connect( database="expat", user="david", password="1", host="localhost", port="5432" ) mysql_conn= MySQLdb.connect( host='localhost', port = 3306, user='root', passwd='1', db ='blog', ) def get_user_data(): cur = psycopg2_conn.cursor() cur.execute("SELECT * FROM auth_user;") rows = cur.fetchall() cur.close() psycopg2_conn.commit() psycopg2_conn.close() return rows #get_user_data() def save_user_to_mysql(rows): cur = mysql_conn.cursor() for row in rows: newrow = list() newrow.append(row[0]) # 0 id newrow.append(row[4]) # 1 name newrow.append(row[7]) # 2 email newrow.append('') # 3 password newrow.append(1) if row[9] is True else newrow.append(0) # 5 activated newrow.append(0) # 6 banned r2 = row[2] last_login = datetime.datetime(r2.year, r2.month, r2.day, r2.hour, r2.minute, r2.second) last_login = last_login.strftime('%Y-%m-%d %H:%M:%S') newrow.append(last_login) # 9 last_login newrow.append(0) # 12 protected r10 = row[10] created_at = datetime.datetime(r10.year, r10.month, r10.day, r10.hour, r10.minute, r10.second) created_at = created_at.strftime('%Y-%m-%d %H:%M:%S') newrow.append(created_at) # 13 created_at newrow.append(row[1]) # 16 password_old sql = ''' insert into users(id, name, email, password, activated, banned,last_login,protected, created_at,password_old) values(%d, '%s', '%s', '%s', %s, %d, '%s', %d, '%s', '%s') ''' % tuple(newrow) print sql cur.execute(sql) if row[3] is True: # is_superuser is True cur.execute(''' insert into users_groups (user_id, group_id) values(%d, 1) ''' % row[0] ) cur.close() mysql_conn.commit() mysql_conn.close() #save_user_to_mysql(None) if __name__ == '__main__': rows=get_user_data() save_user_to_mysql(rows) pass
同时还要拷贝个profile表,稍微复杂点,sql写的很坑爹啊
import psycopg2 import MySQLdb import datetime, time psycopg2_conn = psycopg2.connect( database="expat", user="david", password="1", host="localhost", port="5432" ) mysql_conn= MySQLdb.connect( host='localhost', port = 3306, user='root', passwd='1', db ='blog', ) def get_user_data(): cur = psycopg2_conn.cursor() #cur.execute("SELECT * FROM auth_user;") cur.execute( "select * from auth_user join accounts_myprofile on auth_user.id = accounts_myprofile.user_id;" ) rows = cur.fetchall() cur.close() psycopg2_conn.commit() psycopg2_conn.close() #for row in rows: # print row return rows #get_user_data() def save_user_to_mysql(rows): cur = mysql_conn.cursor() for row in rows: ####### insert into user table userrow = list() userrow.append(row[0]) # 0 id userrow.append(row[4]) # 1 name userrow.append(row[7]) # 2 email userrow.append('') # 3 password userrow.append(1) if row[9] is True else userrow.append(0) # 5 activated userrow.append(0) # 6 banned r2 = row[2] last_login = datetime.datetime(r2.year, r2.month, r2.day, r2.hour, r2.minute, r2.second) last_login = last_login.strftime('%Y-%m-%d %H:%M:%S') userrow.append(last_login) # 9 last_login userrow.append(0) # 12 protected r10 = row[10] created_at = datetime.datetime(r10.year, r10.month, r10.day, r10.hour, r10.minute, r10.second) created_at = created_at.strftime('%Y-%m-%d %H:%M:%S') userrow.append(created_at) # 13 created_at userrow.append(row[1]) # 16 password_old sql = ''' insert into users(id, name, email, password, activated, banned,last_login,protected, created_at,password_old) values(%d, '%s', '%s', '%s', %s, %d, '%s', %d, '%s', '%s') ''' % tuple(userrow) cur.execute(sql) ######## insert into user group if row[3] is True: # is_superuser is True cur.execute(''' insert into users_groups (user_id, group_id) values(%d, 1) ''' % row[0] ) ######## insert into profile table print row profile_row = list() profile_row.append(row[11]) # profile table field id profile_row.append(row[0]) # user_id profile_row.append(row[5]) if row[5] else profile_row.append('') # first_name profile_row.append(row[6]) if row[6] else profile_row.append('') # last_name profile_row.append(row[16]) if row[16] else profile_row.append('') # phone profile_row.append(row[15]) if row[15] else profile_row.append('') # address profile_row.append(created_at) # created_at profile_row.append(row[12]) if row[12] else profile_row.append('') # mugshot profile_row.append(row[13]) # privacy profile_row.append(row[17]) if row[17] else profile_row.append('') # company_name profile_row.append(row[14]) if row[14] else profile_row.append('null') # housing_uid profile_row.append(row[18]) if row[18] else profile_row.append('null') # live_area profile_row.append(row[19]) if row[19] else profile_row.append('null') # come_from profile_row.append(row[20]) if row[20] else profile_row.append('null') # come_reason profile_row.append(row[21]) if row[21] else profile_row.append('null') # gender profile_row.append(row[22]) if row[22] else profile_row.append('null') # marital profile_row.append(row[23]) if row[23] else profile_row.append('null') # kids #profile_row.append(row[26]) # is_bussiness profile_row.append(1) if row[26] is True else profile_row.append(0) # is_bussiness #profile_row.append(row[27]) # is_paid_for_classifieds profile_row.append(1) if row[27] is True else profile_row.append(0) # is_paid_for_classifieds #profile_row.append(row[28]) # is_approved profile_row.append(1) if row[28] is True else profile_row.append(0) # is_approved if row[24]: r24 = row[24] birthday = datetime.datetime(r24.year, r24.month, r24.day) birthday = birthday.strftime('%Y-%m-%d') profile_row.append(birthday) # birthday else: profile_row.append(row[24]) profile_sql = ''' insert into user_profile(id, user_id, first_name, last_name, phone, address,created_at,mugshot, privacy,company_name,housing_uid, live_area, come_from, come_reason, gender, marital, kids, is_bussiness, is_paid_for_classifieds, is_approved, birthday) values(%d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %s, %s, %s, %s, %s, %s, %s, %s, %d, %d, '%s' ) '''% tuple(profile_row) print profile_sql cur.execute(profile_sql) cur.close() mysql_conn.commit() mysql_conn.close() #save_user_to_mysql(None) if __name__ == '__main__': rows=get_user_data() save_user_to_mysql(rows) pass
article表 从pgsql拷到mysql
1 article表拷到本地pg数据库
1.1 $ pg_dump -h xxx -U username expat -t article_article >/home/david/article_article.sql
1.2 改sql文件中的用户名,改为本地数据库的用户名 例如username-->david
1.3 $ psql -h localhost -U david postgres -t article_article< /home/david/article_article.sql
2 从postgres中导出数据到csv中
2.1 新建一个csv文档,给权限,$ chmod 777 article_article.csv
2.2 以超级用户postgres, 密码postgres 登录 pgsql,
运行sql, $ COPY (SELECT * FROM article_article) TO '/home/david/article_article.csv' WITH CSV HEADER;
2.3 用vim把导出的csv文件的第一行删掉(culomn名删了)
3 csv中导入mysql
3.1 mysql 是从 /var/lib/mysql/blog (blog是数据库名)这个目录下读文件的,所以把csv放到此目录下
$ sudo cp article_article.csv /var/lib/mysql/blog/article_article.csv
3.2 建一个表article_article
3.3然后在mysql运行sql命令:
load data infile 'article_article.csv'
into table blog.article_article
fields terminated by ',' optionally enclosed by '"' escaped by '"'
lines terminated by '\n';
4 pgsql用true false表示boolean,mysql用0,1,此时的mysql的article表中布尔值都是0,明显不对, 所以要做修改,我是用python脚本
import psycopg2 import MySQLdb import datetime, time psycopg2_conn = psycopg2.connect( #database="expat", database="postgres", user="david", password="1", host="localhost", port="5432" ) mysql_conn= MySQLdb.connect( host='localhost', port = 3306, user='root', passwd='1', db ='blog', ) def import_mysql_boolean(): ''' ''' cur = psycopg2_conn.cursor() cur.execute(''' select id,is_approved, is_special, is_welcome, is_shf_featured, is_shf_sponsored, is_homepage_sponsored, is_home_featured from article_article ''') rows = cur.fetchall() #print rows cur.close() psycopg2_conn.commit() psycopg2_conn.close() cur2 = mysql_conn.cursor() for row in rows: arow = list() arow.append(row[0]) arow.append(1) if row[1] is True else arow.append(0) # is_approved arow.append(1) if row[2] is True else arow.append(0) # is_special arow.append(1) if row[3] is True else arow.append(0) # is_welcome arow.append(1) if row[4] is True else arow.append(0) # is_shf_featured arow.append(1) if row[5] is True else arow.append(0) # is_shf_sponsored arow.append(1) if row[6] is True else arow.append(0) # is_homepage_sponsored arow.append(1) if row[7] is True else arow.append(0) # is_home_featured sql = ''' update article_article set is_approved={is_approved}, is_special={is_special}, is_welcome={is_welcome}, is_shf_featured={is_shf_featured}, is_shf_sponsored={is_shf_sponsored}, is_homepage_sponsored={is_homepage_sponsored}, is_home_featured={is_home_featured} where id = {id} '''.format(id=arow[0], is_approved=arow[1], is_special=arow[2], is_welcome=arow[3], is_shf_featured=arow[4], is_shf_sponsored=arow[5], is_homepage_sponsored=arow[6], is_home_featured=arow[7], ) #print sql cur2.execute(sql) cur2.close() mysql_conn.commit() mysql_conn.close() if __name__ == '__main__': #copy_category() #copy_author() #copy_article() import_mysql_boolean() #copy_article_tags() pass
相关推荐
了解如何在Python环境中安装和使用此类库,以及对MySQL和PostgreSQL数据库的基本知识,对于进行跨数据库的数据迁移至关重要。在实际操作中,正确配置数据库连接参数,理解数据迁移的潜在问题,以及熟悉所使用的库的...
MySQL的表类型和索引类型受到存储引擎限制,如MyISAM支持B-Tree,InnoDB也支持B-Tree。PostgreSQL则更为灵活,支持B-树、哈希、R-树和Gist等多种索引类型,以及临时表、常规表和复杂分区表。 #### 十、约束与扩展...
pg_chameleon是一个从MySQL复制到PostgreSQL的工具,兼容Python 2.7和Python 3.3 。该系统使用库mysql-replication来从MySQL拉取行镜像,将其转换成jsonb对象。一个pl/pgsql函数解码该jsonb对象,然后将更改重新执行...
这个端点接受一个包含用户姓名和电子邮件的JSON对象,并将其插入到用户表中,同时返回新创建的用户ID。 5. **更新数据(Update)** 更新数据涉及PUT或PATCH请求。假设我们已经有了一个用户ID,我们可以创建一个...
2.多线程写入数据到数据库postgresql/mysql 3.线程之间通过队列queue通讯 4.出错消息通过logging写日志 @author: ray ----------web日志格式如下----------------- 21.106.138.118 - - [02/Mar/2015:16:27:22 +0800...
python操作链接Oracle、PostgreSQL,MySql数据库增删改查代码,通过PooledDB实现池链接,实际运维中积累
用户定义函数可以用PL/pgSQL(一种专为PostgreSQL设计的过程语言)、PL/Tcl、PL/Perl、PL/Python、SQL和C等语言编写。 #### 十五、触发器 **MySQL**: MySQL支持行前触发器、行后触发器和语句触发器,触发器语句用...
在提供的压缩包子文件"sql_连接数据库.py"中,我们可以推测这是一个实际的Python脚本,它展示了如何使用Python连接到MySQL数据库。 现在,让我们详细讨论相关知识点: 1. **Python的数据库接口模块**:Python提供...
4. **数据填充**:使用编程语言(如Python、Java或Perl)配合数据库连接库(如pymysql、psycopg2等),遍历获取的库表信息,并填入到Word模板中。这可能涉及到字符串格式化、模板引擎(如Jinja2)或者直接操作Word...
Python DB-API,全称为Python Database API Specification v2.0,是Python编程语言中用于数据库操作的标准接口。这个规范定义了一套标准的对象和方法,使得开发者能够以统一的方式访问不同的数据库系统,比如MySQL、...
根据给定文件信息,以下是对标题、描述、标签及部分内容中提到的知识点的详细说明: 1. Sphinx搜索引擎介绍: Sphinx是一个开源的全文搜索引擎,采用GPLv2许可证发布,专门为数据库全文检索提供解决方案。它具有...
例如,要安装 plv8 插件,需要在 Windows 平台上使用 MSVC 编译器编译,或者直接下载预编译好的二进制文件,并将其复制到 PostgreSQL 的安装目录中。 pgxn 工具 pgxn 是一个类似于 pip 的包管理工具,用于下载和...
1、下载安装MySQLdb类库http://www.djangoproject.com/r/python-mysql/2、修改settings.py 配置数据属性复制代码 代码如下:DATABASES = { ‘default’: { ‘ENGINE’: ‘django.db.backends.mysql’, # Add ...
9. **扩展与开发**:介绍如何编写自定义函数、存储过程,使用PL/pgSQL和其他编程语言(如C)开发PostgreSQL扩展,以及使用PL/Perl、PL/Python等脚本语言。 10. **安全与审计**:讲解PostgreSQL的安全特性,如角色和...
在数据库管理方面,Python提供了多种库来方便开发者与各种类型的数据库进行交互,例如MySQL、MSSQL(Microsoft SQL Server)和PostgreSQL。其中,`PyMySQL`是用于连接MySQL数据库的Python库,`pyodbc`则适用于MSSQL...
在给定的标题和描述中提到了多个知名的DBMS,包括MySQL、Oracle、PostgreSQL、SQLite、SQL Server、MariaDB和MongoDB。下面将分别对这些数据库系统进行详细介绍。 1. MySQL: MySQL是一款开源、免费的关系型数据库...