操作数据库的基本流程 使用Python DB API 2.0操作数据库的基本流程如下: 调用connect()方法打开数据库连接,该方法返回数据库连接对象。 通过数据库连接对象打开游标。 使用游标执行
操作数据库的基本流程
使用Python DB API 2.0操作数据库的基本流程如下:
Created with Raphaël 2.2.0
开始
打开数据库连接
获取游标
执行SQL语句获取数据处理数据
关闭游标
关闭数据库连接
结束
操作SQLite数据库
SQLite只是一个嵌入式的数据库引擎,专门适用于在资源有限的设备上进行适量数据的存取。只是一个文件,不需要服务器进程。
>>> import sqlite3>>> sqlite3.apilevel
'2.0'
>>> conn = sqlite3.connect('first.db')
>>> c = conn.cursor()
>>> c.execute("""
... create table user_tb(
... _id integer primary key autoincrement,
... name text,
... pass text,
... gender text)""")
<sqlite3.Cursor object at 0x0000013DF824B880>
>>> c.execute("""
... create table order_tb(
... _id integer primary key autoincrement,
... item_name text,
... item_price real,
... item_number real,
... user_id inteter,
... foreign key(user_id) references user_tb(_id) )""")
<sqlite3.Cursor object at 0x0000013DF824B880>
>>> c.close()
>>> conn.close()
使用SQLite Expert工具
SQLite
插入一条数据
>>> import sqlite3>>> conn = sqlite3.connect('first.db')
>>> c = conn.cursor()
>>> c.execute('insert into user_tb values(null, ?, ?, ?)', ('孙悟空', '123456', 'male'))
<sqlite3.Cursor object at 0x0000026AB9C4B880>
>>> conn.commit()
>>> c.close()
>>> conn.close()
插入多条数据
>>> import sqlite3>>> conn = sqlite3.connect('first.db')
>>> c = conn.cursor()
>>> c.executemany('insert into user_tb values(null, ?, ?, ?)',
... (('sun', '123456', 'male'),
... ('bai', '123456', 'female'),
... ('zhu','123456','male')))
<sqlite3.Cursor object at 0x0000024F0EF7B880>
>>> conn.commit()
>>> c.close()
>>> conn.close()
executemany()方法执行一条insert语句, 但调用该方法的第二个参数是一个元组,该元组的每个元素都代表执行该insert语句一次,在执行insert语句时这些元素负责为该语句中的“?”占位符赋值。
一次update多条语句
>>> import sqlite3>>> conn = sqlite3.connect('first.db')
>>> c = conn.cursor()
>>> c.executemany('update user_tb set name=? where _id=?',
... (('小孙孙', 2),
... ('小白', 3)))
<sqlite3.Cursor object at 0x0000017F10E4B880>
>>> c.rowcount
2
>>> conn.commit()
>>> c.close()
>>> conn.close()
查找
>>> import sqlite3>>> conn = sqlite3.connect('first.db')
>>> c = conn.cursor()
>>> c.execute('select * from user_tb where _id > ?', (2,))
<sqlite3.Cursor object at 0x0000026FD697B880>
>>> for col in (c.description):
... print(col[0], end='\t')
...
_id name pass gender >>>
>>> while True:
... row = c.fetchone()
... if not row:
... break
... print(row)
...
(3, '小白', '123456', 'female')
(4, 'zhu', '123456', 'male')
通过游标还可以使用:fetchone()、fetchmany(n)、fetchall()来获取查询结果。
执行SQL脚本
使用c.executescript()来执行一段SQL脚本。
创建自定义函数
使用conn.create_function()注册自定义函数。
创建聚集函数
标准的SQL语句提供了:sum(),avg(),count(),max(),min().
conn.create_aggregate(name, num_params, aggregate_class)
name:指定自定义聚集函数的名字
num_params:指定聚集函数所需的参数
aggregate_class:指定聚集函数的实现类,该类必须实现step(),finalize()方法,step方法对于查询所返回的每条记录各执行一次,finalize方法只在最后执行一次,该方法返回值将作为聚集函数最后的返回值。
def __init__(self):
pass
def step(self):
pass
def finalize(self):
passconn.create_aggregate('min_len',1,MinLen)
c = conn.cursor()
c.execute('select min_len(pass) from user_tb')
创建比较函数
conn.create_collation('sub_cmp', my_collate)c = conn.cursor()
c.execute('select * from user_tb order by pass collate sub_cmp')
- 参考文献:《疯狂python讲义》李刚 编