最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • python如何使用sqlite

    正文概述    2020-10-04   159

    python如何使用sqlite

    SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说没有独立的维护进程,所有的维护都来自于程序本身。它是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。

    它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、php、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。

    SQLite第一个Alpha版本诞生于2000年5月. 至今已经有10个年头,SQLite也迎来了一个版本 SQLite 3已经发布。

    安装与使用

    一、导入Python SQLITE数据库模块

    Python2.5之后,内置了SQLite3,成为了内置模块,这给我们省了安装的功夫,只需导入即可。

    import sqlite3

    二、创建/打开数据库 

    在调用connect函数的时候,指定库名称,如果指定的数据库存在就直接打开这个数据库,如果不存在就新创建一个再打开。

    cx = sqlite3.connect("E:/test.db")

    也可以创建数据库在内存中。

    con = sqlite3.connect(":memory:")

    相关推荐:《Python教程》

    三、数据库连接对象

    打开数据库时返回的对象cx就是一个数据库连接对象,它可以有以下操作:

    ·commit()--事务提交   

    ·rollback()--事务回滚   

    ·close()--关闭一个数据库连接   

    ·cursor()--创建一个游标

    关于commit(),如果isolation_level隔离级别默认,那么每次对数据库的操作,都需要使用该命令,你也可以设置isolation_level=None,这样就变为自动提交模式。

    四、使用游标查询数据库

    我们需要使用游标对象SQL语句查询数据库,获得查询对象。 通过以下方法来定义一个游标。

    cu=cx.cursor()

    游标对象有以下的操作:

    ·execute()--执行sql语句   

    ·executemany--执行多条sql语句   

    ·close()--关闭游标   

    ·fetchone()--从结果中取一条记录,并将游标指向下一条记录   

    ·fetchmany()--从结果中取多条记录   

    ·fetchall()--从结果中取出所有记录   

    ·scroll()--游标滚动  

    1、建表

    cu.execute("create table catalog (id integer primary key,pid integer,name varchar(10) UNIQUE,nickname text NULL)")

    上面语句创建了一个叫catalog的表,它有一个主键id,一个pid,和一个name,name是不可以重复的,以及一个nickname默认为NULL。

    2、插入数据 

    请注意避免以下写法:

    # Never do this -- insecure 会导致注入攻击
    pid=200
    c.execute("... where pid = '%s'" % pid)

    正确的做法如下,如果t只是单个数值,也要采用t=(n,)的形式,因为元组是不可变的。 

    for t in[(0,10,'abc','Yu'),(1,20,'cba','Xu')]:
        cx.execute("insert into catalog values (?,?,?,?)", t)

    简单的插入两行数据,不过需要提醒的是只有提交了之后,才能生效。我们使用数据库连接对象cx来进行提交commit和回滚rollback操作。

    cx.commit()

    3、查询

    cu.execute("select * from catalog")

    要提取查询到的数据,使用游标的fetch函数,如:

    In [10]: cu.fetchall()
    Out[10]: [(0, 10, u'abc', u'Yu'), (1, 20, u'cba', u'Xu')]

    如果我们使用cu.fetchone(),则首先返回列表中的第一项,再次使用,则返回第二项,依次下去。

    4、修改

    In [12]: cu.execute("update catalog set name='Boy' where id = 0")
    In [13]: cx.commit()

    注意,修改数据以后提交。

    5、删除

    cu.execute("delete from catalog where id = 1")  
    cx.commit()

    6、使用中文

    请先确定你的IDE或者系统默认编码是utf-8,并且在中文前加上u。

    x=u'鱼'
    cu.execute("update catalog set name=? where id = 0",x)
    cu.execute("select * from catalog")
    cu.fetchall()
    [(0, 10, u'\u9c7c', u'Yu'), (1, 20, u'cba', u'Xu')]

    如果要显示出中文字体,那需要依次打印出每个字符串。

    In [26]: for item in cu.fetchall():
       ....:     for element in item:
       ....:         print element,
       ....:     print
       ....: 
    0 10 鱼 Yu
    1 20 cba Xu

    7、Row类型

    Row提供了基于索引和基于名字大小写敏感的方式来访问列而几乎没有内存开销。 

    下面举例说明

    In [30]: cx.row_factory = sqlite3.Row
    In [31]: c = cx.cursor()
    In [32]: c.execute('select * from catalog')
    Out[32]: <sqlite3.Cursor object at 0x05666680>
    In [33]: r = c.fetchone()
    In [34]: type(r)
    Out[34]: <type 'sqlite3.Row'>
    In [35]: r
    Out[35]: <sqlite3.Row object at 0x05348980>
    In [36]: print r
    (0, 10, u'\u9c7c', u'Yu')
    In [37]: len(r)
    Out[37]: 4
    In [39]: r[2]            #使用索引查询
    Out[39]: u'\u9c7c'
    In [41]: r.keys()
    Out[41]: ['id', 'pid', 'name', 'nickname']
    In [42]: for e in r:
       ....:     print e,
       ....: 
    0 10 鱼 Yu

    使用列的关键词查询

    In [43]: r['id']
    Out[43]: 0
    In [44]: r['name']
    Out[44]: u'\u9c7c'

    起源地下载网 » python如何使用sqlite

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元