Python模块之SQLite

SQLite(数据库)

   SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说没有独立的维护进程,所有的维护都来自于程序本身。它是遵守ACID的关联式数据库 管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能 够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度 比他们都快。SQLite第一个Alpha版本诞生于2000年5月. 至今已经有10个年头,SQLite也迎来了一个版本 SQLite 3已经发布。

案例:为书店创建一个存放输分类和价格的数据库

分析:数据库中包含两个表:category记录书分类,book记录某本书的信息,一本书归属于某个类,因此book有一个外键,指向category表的主键id.

创建数据库

   首先来创建数据库,以及数据库中的表。在使用connect()连接数据库后,就可以通过定位指针cursor,来执行SQL命令。SQLite的数据库 是一个磁盘上的文件,如上面的test.db,因此整个数据库可以方便的移动或复制。test.db一开始不存在,所以SQLite将自动创建一个新文 件。利用execute()命令,我执行了两个SQL命令,创建数据库中的两个表。创建完成后,保存并断开数据库连接。

import sqlite3
import os

# 创建db文件
os.mkdir("db")
conn = sqlite3.connect(os.path.join("db", "test.db"))
c = conn.cursor()

# 创建tables
c.execute("""CREATE TABLE category (id int primary key, sort int, name text)""")
c.execute("""CREATE TABLE book
            (id int primary key,
             sort int,
             name text,
             price real,
             category int,
             FOREIGN KEY (category) REFERENCES category(id))""") # 提交修改 conn.commit() # 关闭数据库连接 conn.close()

 

插入数据

  创建了数据库及相关表结构,现在就可以插入数据了。插入数据同样可以使用execute()来执行完整的SQL语句。SQL语句中的参数,使用"?"作为替代符号,并在后面的参数中给出具体值。这里不能用Python的格式化字符串,如"%s",因为这一用法容易受到SQL注入攻击。
  可以用executemany()的方法来执行多次插入,增加多个记录。每个记录是表中的一个元素,如上面的books表中的元素。

import sqlite3
import os

# 创建db文件
# os.mkdir("db")
conn = sqlite3.connect(os.path.join("db", "test.db"))
c = conn.cursor()

books = [(1, 1, 'Cook Recipe', 3.12, 1),
         (2, 3, 'Python Intro', 17.5, 2),
         (3, 2, 'OS Intro', 13.6, 2), ]

# 插入单条数据
c.execute("INSERT INTO category VALUES (1, 1, 'kitchen')")

# 使用占位符
c.execute("INSERT INTO category VALUES (?, ?, ?)", (2, 2, 'computer'))

# 同时插入多条数据
c.executemany('INSERT INTO book VALUES (?, ?, ?, ?, ?)', books)

# 提交修改
conn.commit()

# 关闭数据库连接
conn.close()

 

 查询数据

  在执行查询语句后,Python将返回一个循环器,包含有查询获得的多个记录。你循环读取,也可以使用sqlite3提供的fetchone()和fetchall()方法读取记录:

import sqlite3
import os

conn = sqlite3.connect(os.path.join("db", "test.db"))
c = conn.cursor()

# 获取单条数据
c.execute('SELECT name FROM category ORDER BY sort')
print(c.fetchone())
print(c.fetchone())

# 获取多条数据,结果为列表
c.execute('SELECT * FROM book WHERE book.category=1')
print(c.fetchall())

# iterate through the records
for row in c.execute('SELECT name, price FROM book ORDER BY sort'):
    print(row)

# 提交修改
conn.commit()

# 关闭数据库连接
conn.close()

 

更新与删除

  可以更新某个记录,或者删除记录,也可以直接删除整张表

import sqlite3
import os

conn = sqlite3.connect(os.path.join("db", "test.db"))
c = conn.cursor()

# 更新表内容
c.execute('UPDATE book SET price=? WHERE id=?', (1000, 1))  

# 删除单条数据
c.execute('DELETE FROM book WHERE id=2')

# 删除表
c.execute('DROP TABLE book')

# 提交修改
conn.commit()

# 关闭数据库连接
conn.close()

 

其他方法说明

 

总结

  sqlite3只是一个SQLite的接口。想要熟练的使用SQLite数据库,还需要学习更多的关系型数据库的知识。

参考资料

http://www.runoob.com/sqlite/sqlite-python.html

其他

问题1:在CentOS系统上部署Django项目应用sqlite数据库报错

报错信息django.core.exceptions.ImproperlyConfigured: Error loading either pysqlite2 or sqlite3 module

解决:

yum install -y sqlite sqlite-devel
cd Python-3.5.0/
make && make install

 

posted @ 2016-07-25 08:26  每天进步一点点!!!  阅读(628)  评论(0编辑  收藏  举报