日期:2014-05-16 浏览次数:20526 次
这是我写的一个使用 pysqlite2 写的数据库备份的小程序,功能相对简单。它可以将指定的库备份成Insert语句。代码如下:
#coding=cp936 #本程序用于sqlite数据库的备份,备份结果为SQL的INSERT语句 #本程序适用于pysqlite2版本 #开发者:limodou #版权:GPL # import sqlite3 as sqlite import os.path def dbbackup(dbname, path='', singlefile=False, encoding='utf-8'): """备份整个数据库 dbname 数据库文件名 path 数据保存目录 singlefile 是否保存到单个文件,如果为True,则数据会保存在以dbname开头的.txt文件中 否则会按表名分别存储 encoding 保存文件编码 """ cx = sqlite.connect(dbname) cu = cx.cursor() cu.execute(u'select name from sqlite_master where type="table" order by name') if singlefile: filename = os.path.join(path, os.path.basename(dbname) + '.txt') f = file(filename, 'wb') for (table,) in cu.fetchall(): if not singlefile: filename = os.path.join(path, table + '.txt') f = file(filename, 'wb') unload(cu, table, f, encoding) if not singlefile: f.close() def unload(cu, tablename, fp, encoding='utf-8'): cu.execute('select * from %s' % tablename) if cu.description: description = cu.description sql = 'INSERT INTO %s ' % tablename columns = [] for v in description: columns.append(v[0]) sql += '(' + ','.join(columns) +' ) VALUES ' fp.write("BEGIN TRANSACTION;\n") for record in cu.fetchall(): fsql = sql.encode(encoding) + '('+ ','.join(_repr(record, encoding)) +' );\n' fp.write(fsql) fp.write("COMMIT;\n") def _repr(record, encoding='utf-8'): s = [] for i in record: if isinstance(i, str): s.append("'" + i + "'") elif isinstance(i, unicode): s.append("'" + i.encode(encoding) + "'") else: s.append(str(i)) return s if __name__ == '__main__': dbbackup('DLib.db', 'g:') # dbbackup(‘d:/test.db’, ‘d:/project’, singlefile=True, encoding=’cp936′)
?
?
只要你自已建一个库,然后按测试代码改一下试试就行了。
如果想使用 Python 来装入数据,可以:
cu.executescript(file('g:/DataRecord.txt').read()) cx.commit()
?
?
其中DataRecord.txt为备份出的文件。大家有兴趣可以试试。
当然这些工作使用sqlite的客户端都是可以做的,但有时还是希望在程序中来控制一切。
?
?
from:http://blog.donews.com/limodou/archive/2005/06/14/430149.aspx