Python 数据库编程:SQLite

在本教程中,你将学习如何在 Python 中使用 SQLite 数据库管理系统。你将学习如何使用 SQLite,SQL 查询,RDBMS 以及更多这些很酷的东西!

Pyton 数据库

![Python 数据库。

使用 SQL 语言从数据库系统检索数据。](https://pythonspot-9329.kxcdn.com/wp-content/uploads/2016/08/dbms-300x131.png)

数据无处不在,软件应用程序使用它。数据位于内存、文件或数据库中。

Python 具有许多数据库系统的绑定,包括 MySQLPostregsql ,Oracle,Microsoft SQL Server 和 Maria DB。

其中一个数据库管理系统(DBMS)称为 SQLite。SQLite 创建于 2000 年,是数据库中众多管理系统之一。

SQL 是一种专用编程语言,用于管理数据库中的数据。该语言自 1986 年以来一直存在,值得学习。

SQLite

SQLite,一种关系数据库管理系统。

SQLite 是世界上部署最广泛的 SQL 数据库引擎。SQLite 的源代码位于公共互联网中。

它是一个独立的,无服务器,零配置,事务性 SQL 数据库引擎。SQLite 项目由 Bloomberg 和 Mozilla 赞助。

安装 SQLite:

使用此命令安装 SQLite:

$ sudo apt-get install sqlite

验证是否正确安装。复制此程序并将其另存为 test1.py

#!/usr/bin/python 
import sqlite3 as lite
import sys
 
con = None
 
try:
    con = lite.connect('test.db')
    cur = con.cursor()    
    cur.execute('SELECT SQLITE_VERSION()')
    data = cur.fetchone()
    print "SQLite version: %s" % data                
except lite.Error, e:   
    print "Error %s:" % e.args[0]
    sys.exit(1)
finally:    
    if con:
        con.close()

执行:

$ python test1.py

它应该输出:

SQLite version: 3.8.2

上面的脚本做了什么?

该脚本使用以下行连接到名为 test.db 的新数据库:

con = lite.connect('test.db')

然后,它使用该命令查询数据库管理系统

SELECT SQLITE_VERSION()

然后返回其版本号。该行称为 SQL 查询。

SQL 创建和插入

下面的脚本将数据存储到名为 user.db 的新数据库中

#!/usr/bin/python 
import sqlite3 as lite
import sys
 
con = lite.connect('user.db')
 
with con:
 
    cur = con.cursor()    
    cur.execute("CREATE TABLE Users(Id INT, Name TEXT)")
    cur.execute("INSERT INTO Users VALUES(1,'Michelle')")
    cur.execute("INSERT INTO Users VALUES(2,'Sonya')")
    cur.execute("INSERT INTO Users VALUES(3,'Greg')")

SQLite 是一个使用表的数据库管理系统。这些表可以与其他表有关系:它称为关系数据库管理系统或 RDBMS。该表定义了数据的结构并可以保存数据。数据库可以容纳许多不同的表。使用以下命令创建表:

    cur.execute("CREATE TABLE Users(Id INT, Name TEXT)")

我们使用以下命令将记录添加到表中:

    cur.execute("INSERT INTO Users VALUES(2,'Sonya')")
    cur.execute("INSERT INTO Users VALUES(3,'Greg')")

第一个值是 ID。第二个值是名称。一旦我们运行脚本,数据就会被插入数据库表用户:

Id Name
1 1 Michelle
2 2 Sonya
3 3 Greg

SQLite 查询数据

我们可以使用两种方法来探索数据库:命令行和图形界面。

从控制台: 要使用命令行进行探索,请键入以下命令:

sqlite3 user.db
.tables
SELECT * FROM Users;

这将输出表 Users 中的数据。

sqlite> SELECT * FROM Users;
1|Michelle
2|Sonya
3|Greg

从 GUI: 如果你想使用 GUI,有很多选择。我个人选择了 sqllite-man,但还有很多其他选择。我们安装使用:

sudo apt-get install sqliteman

我们启动应用程序 sqliteman。弹出一个 gui。

sqliteman

按 File> Open> user.db. 它似乎没有太大变化,不用担心,这只是用户界面。在左侧是一个小树视图,按 Tables> users。现在将显示包括所有记录的完整表格。

sqliteman

此 GUI 可用于修改表中的记录(数据)并添加新表。

SQL 数据库查询语言

SQL 有许多与数据库交互的命令。你可以从命令行或 GUI 尝试以下命令:

sqlite3 user.db 
SELECT * FROM Users;
SELECT count(*) FROM Users;
SELECT name FROM Users;
SELECT * FROM Users WHERE id = 2;
DELETE FROM Users WHERE id = 6;

我们可以在 Python 程序中使用这些查询:

#!/usr/bin/python 
import sqlite3 as lite
import sys
 
 
con = lite.connect('user.db')
 
with con:    
 
    cur = con.cursor()    
    cur.execute("SELECT * FROM Users")
 
    rows = cur.fetchall()
 
    for row in rows:
        print row

这将从数据库输出 Users 表中的所有数据:

$ python get.py 
(1, u'Michelle')
(2, u'Sonya')
(3, u'Greg')

创建用户信息数据库

我们可以跨多个表构建数据。这使我们的数据结构化,快速和有条理。如果我们有一个表来存储所有东西,我们很快就会出现混乱。我们要做的是创建多个表并将它们组合使用。我们创建了两个表:

用户:

Id Name
1 1 Michelle
2 2 Howard
3 3 Greg

工作:

Id Uid 职业
1 1 1 Scientist
2 2 2 Marketer
3 3 3 Developer

要创建这些表,可以在 GUI 中手动完成,也可以使用下面的脚本:

import sqlite3 as lite
import sys
 
con = lite.connect('system.db')
 
with con:
 
    cur = con.cursor()    
    cur.execute("CREATE TABLE Users(Id INT, Name TEXT)")
    cur.execute("INSERT INTO Users VALUES(1,'Michelle')")
    cur.execute("INSERT INTO Users VALUES(2,'Howard')")
    cur.execute("INSERT INTO Users VALUES(3,'Greg')")
 
    cur.execute("CREATE TABLE Jobs(Id INT, Uid INT, Profession TEXT)")
    cur.execute("INSERT INTO Jobs VALUES(1,1,'Scientist')")
    cur.execute("INSERT INTO Jobs VALUES(2,2,'Marketeer')")
    cur.execute("INSERT INTO Jobs VALUES(3,3,'Developer')")

jobs 表有一个额外的参数 Uid。我们使用它来连接 SQL 查询中的两个表:

SELECT users.name, jobs.profession FROM jobs INNER JOIN users ON users.ID = jobs.uid

你可以将该 SQL 查询合并到 Python 脚本中:

#!/usr/bin/python 
import sqlite3 as lite
import sys
 
 
con = lite.connect('system.db')
 
with con:    
 
    cur = con.cursor()    
    cur.execute("SELECT users.name, jobs.profession FROM jobs INNER JOIN users ON users.ID = jobs.uid")
 
    rows = cur.fetchall()
 
    for row in rows:
        print row

它应该输出:

$ python get2.py
(u'Michelle', u'Scientist')
(u'Howard', u'Marketeer')
(u'Greg', u'Developer')