`
dqifa
  • 浏览: 116914 次
社区版块
存档分类
最新评论

一个使用pysqlite2的数据库备份小程序

阅读更多

这是我写的一个使用 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

分享到:
评论

相关推荐

    pysqlite-2.8.1

    在Python的世界里,pysqlite是一个至关重要的库,它为Python程序提供了与SQLite数据库交互的能力。标题“pysqlite-2.8.1 for linux”揭示了我们讨论的是pysqlite的一个特定版本——2.8.1,该版本是专门为Linux操作...

    文件数据库sqlite与pysqlite(python)

    2. **文件存储**:SQLite将数据库作为一个单一的文件存储在磁盘上,便于移植和备份。 3. **SQL支持**:SQLite支持大部分标准SQL语法,包括数据定义语言(DDL)、数据操纵语言(DML)和数据查询语言(DQL)。 4. **事务处理...

    pysqlite that used for python

    pysqlite(通过`sqlite3`库)为Python开发者提供了一个强大且易于使用的SQLite数据库接口。它不仅支持常见的数据库操作,如创建表、插入数据、查询数据等,而且由于SQLite的轻量级特性,非常适合用于小型项目或对...

    pysqlite-2.5.5.tar.gz

    SQLite是一个轻量级、自包含的数据库引擎,广泛应用于移动应用、嵌入式系统以及作为服务器端数据库的替代方案。而pysqlite则是Python编程语言与SQLite数据库之间的一座桥梁,它为Python程序员提供了方便、高效的...

    pysqlite-2.6.3

    SQLite是一个轻量级、嵌入式的关系型数据库,广泛应用于各种小型应用程序,特别是那些需要在本地存储数据但又不希望引入复杂数据库服务器的场景。 **Python与SQLite的结合** 1. **Python接口**: `pysqlite`是...

    pysqlite-2.4.1.win32-py2.4

    然而,值得注意的是,Python 2.4已经是一个非常旧的版本,随着Python 3的普及,开发者更倾向于使用更新的pysqlite版本,如pysqlite-2.x系列,这些版本支持Python 3并提供更多的功能和改进。同时,虽然SQLite对于小...

    PyPI 官网下载 | pysqlite-2.5.6.tar.gz

    资源来自pypi官网。 资源全名:pysqlite-2.5.6.tar.gz

    pysqlite-2.6.3.win32-py2.7

    pysqlite-2.6.3.win32-py2.7

    pysqlite3.txt

    该文件包含了SQL语法基础,SQLite3支持的数据类型,windows 如何安装sqlite3,PyQt界面实现中常用的消息弹出对话框、提供用户输入的输入框、打开文件获取文件/目录路径的文件对话框。

    pysqlite-2.5.6.win32-py2.4

    题外话,其实还有另外一个选择,就是使用trac 0.11dev。不知道具体的原因,trac已经决定使用Genshi来代替ClearSilver作为模板引擎,具体的文档是[Trac with Python 2.5]...

    sqlite一个轻巧的数据库 - 真功夫

    SQLite是一个轻量级的关系型数据库管理系统,以其简单、高效、跨平台的特点在众多应用中广泛使用。 ### SQLite:轻量级数据库的真功夫 SQLite的核心优势在于其轻便性和自包含性,无需服务器进程,所有的数据库操作...

    pysqlite-2.4.1.win32-py2.4.exe

    TRAC python24 支持pysqlite-2.4.1.win32-py2.4.exe

    pysqlite-2.4.1.win32-py2.5.exe

    pysqlite-2.4.1.win32-py2.5

    HNUST - 数据库课设源码(人事管理系统)

    PyMySQL是Python中的一个纯Python实现的MySQL驱动程序,它允许开发者通过Python代码与MySQL数据库进行通信,执行SQL查询,管理数据。 根据以上信息,我们可以总结出以下知识点: 1. **Python3**: Python是一种高级...

    Python库 | pysqlite3tool-0.0.1a0-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:pysqlite3tool-0.0.1a0-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    宿舍管理系统(含数据库、含后台管理)

    【标题】:“宿舍管理系统(含数据库、含后台管理)”是一个基于JavaWeb技术的MVC模式应用,旨在提供一套完整的宿舍信息管理和控制解决方案。 【描述】:该系统不仅包括了前端用户界面,还包含了后台管理功能,以及...

    PyPI 官网下载 | sqlite3_api-1.0.0.tar.gz

    1. **sqlite**:SQLite是一个开源的、嵌入式的数据库系统,广泛用于各种应用程序中,特别是那些需要轻量级数据库管理的小型项目。 2. **zookeeper**:Apache ZooKeeper是一个分布式协调服务,用于分布式应用程序的...

    pysqlite-2.8.3-cp27-cp27m-win_amd64.whl.rar

    在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl...

    以SQLite和PySqlite为例来学习Python DB API

    最后,如果需要一次性插入多条数据,可以使用`executemany()`方法,它接受一个元组列表,每个元组代表一行数据: ```python import sqlite3 conn = sqlite3.connect('test.db') cur = conn.cursor() data_list = ...

    SQLite数据库的DB-API.pdf

    参数`database`可以是一个文件名(如果数据库不存在则创建),也可以是字符串`':memory:'`,在这种情况下,将在内存中创建一个临时数据库。 - 示例:`conn = sqlite3.connect('/tmp/example')` - 内存数据库示例:...

Global site tag (gtag.js) - Google Analytics