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