[Python]轻量好用的数据库 SQLite3
[Python]轻量好用的数据库 SQLite3
青衫游侠 发表于3年前
[Python]轻量好用的数据库 SQLite3
  • 发表于 3年前
  • 阅读 35
  • 收藏 1
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

      最近的小项目要用到数据库,但是数据量又不是特别多,用postgreSQL, MySQL又显得太麻烦。知道Python自带一个轻量化的数据库SQLite,拿来用了一用,性能和效果都不错。


一,数据库安装和新建

import sqlite3

con = sqlite3.connect('/tmp/test.db')

上面的代码就完成了SQLite3数据库的安装,和新数据库的创建。注意connect后面的括号里是字符串,包含想要创建数据库的路径。如果数据库已经存在,则意味着打开这个数据库。


二,数据库操作

      python里的数据库都是通过“游标”(cursor)来完成的。在对目标数据库进行读写前,需要先定义一个游标,然后通过游标来对数据库进行操作,execute后面跟的就是SQL语言命令:

cur = con.cursor()
cur.execute('CREATE TABLE foo (o_id INTEGER PRIMARY KEY, fruit VARCHAR(20), veges VARCHAR(30))')

       下面引用的是数据库游标的描述:

        游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条SQL  选择语句相关联。因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。如果曾经用 C 语言写过对文件进行处理的程序,那么游标就像您打开文件所得到的文件句柄一样,只要文件打开成功, 该文件句柄就可代表该文件。对于游标而言,其道理是相同的。可见游标能够实现按与传统程序读取平面文件类似的方式处理来自基础表的结果集,从而把表中数据以平面文件的形式呈现给程序。

        我们知道关系数据库管理系统实质是面向集合的,在Sqlite中并没有一种描述表中单一记录的表达形式,除非使用where  子句来限制只有一条记录被选中。因此我们必须借助于游标来进行面向单条记录的数据处理。由此可见,游标允许应用程序对查询语句select  返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;它还提供对基于游标位置而对表中数据进行删除或更新的能力;正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。


三, 数据库事务提交

        对数据库的操作后,需要将操作后的变动提交到数据库。这时候要用到刚刚新建/打开数据库时候用到的数据库连接对象了。以下是几个常用的数据库对象操作。

cur.commit() #事务提交
cur.rollback() #事务回滚
cur.close() #关闭一个数据库连接
cur.cursor() #创建一个游标

        

四,获取查询结果

      数据库使用查询语句返回的结果,保存在fetchall() 等函数里面。常用的有下面几个:

cur.fetchall() #返回全部结果
cur.description() #表结构描述
cur.fetchone() #最后一个结果


五,Python数据库自定义操作

      像我这样数据量不大,偶尔查询/写入一下,而且又想偷懒的话,可以自定义一个函数,将要做的动作包含到函数,留一个变量接受SQL语句就好了:

def sql_cmd(req):
    DB_PATH = os.path.join(PATH, "IP.db")
    cx = sqlite3.connect(DB_PATH)
    cu = cx.cursor()
    cu.execute('%s' % req)
    cx.commit()
    return cu.fetchall()

这样,我在Python中操作数据库的时候,只需要直接使用仿SQL语句就好了:

sql_cmd('SELECT * FROM tables')

sql_cmd('CREATE table D_%s (ID INTEGER PRIMARY KEY, IP_Address text UNIQUE NOT NULL, User text DEFAULT "%s", Password text DEFAULT "%s", TimeStamp NOT NULL DEFAULT "%s")' % (GroupName.get(), BMC_USER.get(), BMC_PSW.get(), Current_Time.get()))


六,常用数据库操作语句:

创建表 CREATE TABLE

修改表 ALTER TABLE

删除表 DROP TABLE

主键 PRIMARY KEY

默认值 DEFAULT

非空 NOT NULL

唯一 UNIQUE

条件检查 CHECK

外键 FOREIGN KEY

插入数据 INSERT INTO 表(列...) VALUES(值...)


修改数据 UPDATE 表 SET 列 = '新值' 【WHERE 条件语句】

删除数据 DELETE FROM 表 【WHERE 条件语句】

查找数据 SELECT 列... FROM 表

限制返回数量 SELECT 列... FROM 表 LIMIT 数量 OFFSET 位置

别名 SELECT 列 AS 别名,列 AS 别名 FROM

条件查询 SELECT 列 FROM 表 【WHERE 条件语句】

排序 ORDER BY 列 ASC (DESC)

区分 DISTINCT 列

分组 GROUP BY 列

逻辑运算符


七,逆序排列SQL查询表: 

只需要在查询的组名后加 desc 即可将结果以逆序形式显示出来。


在你的select中使用order by id desc

select * from table name order by id desc


id 可以是你表里的任意列,最好是主键


共有 人打赏支持
粉丝 0
博文 5
码字总数 3498
×
青衫游侠
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: