Sqlite China  
首页 | 各种语言的sqlite编程 |sqlite研究 | sqlite应用实例与杂谈 | sqlite相关下载 | SQlite论坛
当前位置 : 主页>各种语言的sqlite编程>列表
一个使用pysqlite2的数据库备份小程序
来源:工友 作者:工友 时间:2007-12-21

这是我写的一个使用 pysqlite2 写的数据库备份的小程序,功能相对简单。它可以将指定的库备份成Insert语句。代码如下:

#coding=cp936
#本程序用于sqlite数据库的备份,备份结果为SQL的INSERT语句
#本程序适用于pysqlite2版本
#开发者:limodou
#版权:GPL
#
from pysqlite2 import dbapi2 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('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('d:/test.db')
#    dbbackup('d:/test.db', 'd:/project', singlefile=True, encoding='cp936')

只要你自已建一个库,然后按测试代码改一下试试就行了。

如果想使用 Python 来装入数据,可以:

cu.executescript(file('d:/a.txt').read())
cx.commit()

其中a.txt为备份出的文件。大家有兴趣可以试试。

当然这些工作使用sqlite的客户端都是可以做的,但有时还是希望在程序中来控制一切。

(阅读次数:
上一篇:基于ARM-Linux的SQLite嵌入式数据库技术 下一篇:嵌入式数据库SQLite与Java
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
§最新评论
热点文章
·简单的在Java中使用SQLite
·C/C++中调用SQLITE3的基本
·PHP+SQLITE制作简单的视频
·DISQLite3 简介 SQLite de
·VB.NET 中使用 SQLite3 的
·SQLiteJDBC 100%纯JAVA的s
·如何在Windows下编译SQLit
·关于SQLite的一些简单介绍
·在VC6.0中使用C++访问sqli
·C/C++中调用SQLITE3的基本
·SQLite 与 PHP 结合开发(
·在VC6.0中使用C++访问sqli
·使用SQLite进行网站搜索
·SQLite ADO.NET 驱动(C#
·在.NET C#中使用sqlite
·python模块之sqlite数据库
·PHP中的SQlite数据库应用
·如何在PHP5中通过PDO连接S
·PHP中如何使用sqlite_crea
·SQLite 、 PHP混合扩展编
相关文章
·让你的PHP4也用上Sqlite3
·VB.NET 中使用 SQLite3 的
·C/C++中调用SQLITE3的基本
·python模块之sqlite数据库
·在.NET C#中使用sqlite
·用Ruby进行SQLite的开发指
·PHP5中的 sqlite_create_f
·SQLite ADO.NET 驱动(C#
·使用SQLite进行网站搜索
·如何在Windows下编译SQLit

版权Power by DedeCms   后台登陆
Copyright @ 2007