trac 平臺從 PG 資料庫轉到sqlite 的指令碼。
上一篇講了sqlite 的資料字典
這裡就把pg 寫sqlite 的python 指令碼貼出來給需要的朋友做個參考。
#!/usr/bin/env python # -*- coding:utf-8 -*- import os,sys import psycopg2 import sqlite3 as sqllite ## init connstring="host='x.x.x.x' dbname='trac_db' user='trac_user'" rptlib_file=r'pg-sqlite.db' transtfer_db_list={"trac_itmdb":("host='x.x.x.x' dbname='trac_db' user='trac_user'",r'itm_new.db'), clean_table_set=('permission','auth_cookie','session','session_attribute','cache','attachment','repository','revision','node_change', 'ticket','ticket','ticket_change','ticket_custom','enum','component','milestone','version','report') sql_set ={"permission":("""insert into permission (username,action) values(?,?)""",), "auth_cookie":("""insert into auth_cookie (cookie,name,ipnr,time) values(?,?,?,?)""",), "session":("""insert into session (sid,authenticated,last_visit) values(?,?,?)""",), "session_attribute":("""insert into session_attribute (sid,authenticated,name,value) values(?,?,?,?)""",), "cache":("""insert into cache (id,generation) values(?,?)""",), "attachment":("""insert into attachment (type,id,filename,size,time,description,author,ipnr) values(?,?,?,?,?,?,?,?)""",), "repository":("""insert into repository (id,name,value) values (?,?,?)""",), "revision":("""insert into revision (repos,rev,time,author,message) values(?,?,?,?,?)""",), "node_change":("""insert into node_change (repos,rev,path,node_type,change_type,base_path,base_rev) values (?,?,?,?,?,?,?)""",), "ticket":("""insert into ticket (id,type,time,changetime,component,severity,priority,owner,reporter,cc,version, milestone,status,resolution,summary,description,keywords) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)""",), "ticket_change":("""insert into ticket_change (ticket,time,author,field,oldvalue,newvalue) values (?,?,?,?,?,?)""",), "ticket_custom":("""insert into ticket_custom (ticket,name,value) values (?,?,?)""",), "enum":("""insert into enum (type,name,value) values (?,?,?)""",), "component":("""insert into component (name,owner,description) values (?,?,?)""",), "milestone":("""insert into milestone (name,due,completed,description) values (?,?,?,?)""",), "version":("""insert into version (name,time,description) values (?,?,?)""",), "report":("""insert into report (id,author,title,query,description) values (?,?,?,?,?)""",)} def pSTR2u(pgres,code='utf8'): """將PG 返回的結果集中的字串資料先decode(utf8)再encode(gbk)保證匯入sqlite不會是亂碼 限制 : 僅限於oracle中返回的結果集沒有多重q巢狀的情況例如: [(....),(.....)....] z這種格式 如果資料庫l裡沒有使用巢狀表,出來的結果基本都是這種格式,應該可以滿足一般的應用了 """ lst=[] res=[] res=[list(i) for i in pgres] def isAString(anobj): """ 定義測試一個d物件是否是字串的n內部函式, str=true ,else = false """ return isinstance(anobj, basestring) for i in res: for j in range(len(i)): if i[j] is None: i[j]='null' elif isAString(i[j]): try: i[j]=decode(i[j],code).encode('gbk') except: continue lst.append(i) #print lst return lst def clean_sqlite_table(sqlitedb): for i in clean_table_set: sqlitedb.cursor().execute("""delete from %s """%i) sqlitedb.commit() def insert_sqlite_table(sqlitedb,sql,rows): for i in rows: print sql,i sqlitedb.text_factory= str sqlitedb.cursor().execute(sql,i) sqlitedb.commit() def transfer_table(pgdb,sqlitedb): clean_sqlite_table(sqlitedb) for table_name in sql_set: pgdb.execute("""select * from %s """%table_name) table_rows=pgdb.fetchall() table_rows=pSTR2u(table_rows) if len(table_rows) > 0: insert_sqlite_table(sqlitedb,sql_set[table_name][0],table_rows) def main(): for db_name in transtfer_db_list: pgdb = psycopg2.connect(transtfer_db_list[db_name][0]).cursor() sqlitedb = sqllite.connect(transtfer_db_list[db_name][1]) transfer_table(pgdb,sqlitedb) main() |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-757343/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 從linux平臺移值資料庫到windows平臺Linux資料庫Windows
- PG 資料庫查詢欄位屬性的指令碼資料庫指令碼
- PG 資料庫 從阿里雲pg rds 同步資料。資料庫阿里
- pg 資料庫HA 啟動指令碼的兩個假設資料庫指令碼
- 5個免費、跨平臺的SQLite資料庫視覺化工具SQLite資料庫視覺化
- Sql Server資料庫資料匯入到SQLite資料庫中Server資料庫SQLite
- 從IIS轉到SQL資料庫安全(轉)SQL資料庫
- 利用rman來實現linux平臺資料庫複製到windows平臺資料庫Linux資料庫Windows
- 從0到1搭建DeltaLake大資料平臺大資料
- CDGA|從平臺自治到規範化的資料治理
- 直接複製資料檔案實現linux平臺資料庫複製到windows平臺資料庫Linux資料庫Windows
- 【PG資料庫】PG資料庫的安裝及連線方法資料庫
- 資料庫連結的備份指令碼(轉)資料庫指令碼
- 資料庫平臺資料庫
- sqlite 資料庫的資料字典SQLite資料庫
- 汽車之家資料庫服務化平臺從0到1的實踐過程資料庫
- sqlite操作--- oracle資料庫中的資料導進sqliteSQLiteOracle資料庫
- 從Oracle資料庫中匯出SQL指令碼Oracle資料庫SQL指令碼
- 小白的資料進階之路(上)——從Shell指令碼到MapReduce指令碼
- 《mysql資料庫備份小指令碼》(轉)MySql資料庫指令碼
- [轉]監控Oracle資料庫的常用shell指令碼Oracle資料庫指令碼
- 監控Oracle資料庫的常用shell指令碼(轉)Oracle資料庫指令碼
- 小麥苗資料庫巡檢指令碼V7.0,支援Oracle、MySQL、SQL Server和PG資料庫資料庫指令碼OracleMySqlServer
- 回顧·大資料平臺從0到1之後大資料
- 從0到N建立高價效比的大資料平臺大資料
- rman將linux平臺資料庫遷移到window平臺資料庫Linux資料庫
- (轉)oracle 資料庫效能健康檢查指令碼Oracle資料庫指令碼
- Oracle 資料庫管理指令碼命名規範(轉)Oracle資料庫指令碼
- 指令碼建立Oracle的資料庫指令碼Oracle資料庫
- 【轉載】監控Oracle資料庫的常用shell指令碼Oracle資料庫指令碼
- 手工建立資料庫的全部指令碼及說明(轉)資料庫指令碼
- 手工建立資料庫的全部指令碼及說明 (轉)資料庫指令碼
- 從 XML 到 Java 程式碼的資料繫結(2):從 XML 資料建立類(轉)XMLJava
- pg_resetwal pg_resetxlog 重整 pg資料庫 wal 與pg_controldata 。 資料庫恢復。資料庫LDA
- 從 XML 到 Java 程式碼的資料繫結(1)(轉)XMLJava
- 從小白到專家 PostgreSQL技術大講堂 - Part 5:PG資料庫結構SQL資料庫
- 從Oracle資料庫中批量抓取Trigger指令碼的方法Oracle資料庫指令碼
- 【Java】操作Sqlite資料庫JavaSQLite資料庫