访问数据库(廖py)
标签(空格分隔): MYSQL SQLite
当我们需要保存自己定义的存储格式的时候,比如成绩单
姓名 | 成绩 |
---|---|
aaa | 95 |
bbb | 21 |
可以使用文本进行保存,或者使用JSON格式保存文件。但是这种方法并不便捷,查找和添加时都不能满足要求。
因此使用数据库(database)专门集中存储和查询的软件,可以通过条件快速查询到指定的数据。
根据某个年级的ID就可以查找到所有班级的行,这种查询语句在关系数据库中成为SQL语句,可以写成
SELECT * FROM classes WHERE grade_id = ‘1’
结果也是一个表:
SQLite
sqlite3
已经内置在Python中,可以直接import调用。
表是数据库中存放关系数据的集合,一个数据库中通常包含多个表,比如学生表、班级表、学校表。各表之间通过外键关联。
1.要操作数据库,首先要连接到数据库,一个数据库链接称为Connection;
2.连接到数据库后,需要打开游标Cursor,通过Cursor执行SQL语句,然后获得执行结果。
3.Python定义了一套操作数据库的API接口,任何数据库要连接到Python,只需要提供复合Python标准的数据库驱动即可。
create & insert
# 导入SQLite驱动:
>>> import sqlite3
# 连接到SQLite数据库
# 数据库文件是test.db
# 如果文件不存在,会自动在当前目录创建:
>>> conn = sqlite3.connect('test.db')
# 创建一个Cursor:
>>> cursor = conn.cursor()
# 执行一条SQL语句,创建user表:
>>> cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')
<sqlite3.Cursor object at 0x10f8aa260>
# 继续执行一条SQL语句,插入一条记录:
>>> cursor.execute('insert into user (id, name) values (\'1\', \'Michael\')')
<sqlite3.Cursor object at 0x10f8aa260>
# 通过rowcount获得插入的行数:
>>> cursor.rowcount
1
# 关闭Cursor:
>>> cursor.close()
# 提交事务:
>>> conn.commit()
# 关闭Connection:
>>> conn.close()
select
>>> conn = sqlite3.connect('test.db')
>>> cursor = conn.cursor()
# 执行查询语句:
>>> cursor.execute('select * from user where id=?', ('1',))
<sqlite3.Cursor object at 0x10f8aa340>
# 获得查询结果集:
>>> values = cursor.fetchall()
>>> values
[('1', 'Michael')]
>>> cursor.close()
>>> conn.close()
num | work |
---|---|
1. | 建立connection |
2. | 设置cursor |
3. | 通过cursor.execute执行SQL语句 |
4. | 完成操作后关闭connetion,cursor |
使用cursor对象执行insert,update,delete语句时,执行结果由rowcount返回影响的行数。
执行select语句时,通过fetchall()可以拿到结果集,是一个list,每个元素都是一个tuple对应一行记录。
execute()方法
语句中有几个占位符?
就要对应几个参数。
cursor.execute(‘select * from user where name=? and pwd=?, (‘abc’, ‘passward’))
其中有两个占位符,所以有两个参量。当只有一个参量时,参量输入也要为tuple。
cursor.execute(‘select * from user where id=?’, (‘1’,))
练习
sqlite中使用select * from user where ...
进行判断选择。
可以使用between
选择区间。
排序使用select * from user order by ...
,降序时使用desc
关键字。
当需要对排序进行选择时,使用嵌套:
cursor.execute(‘select * from (select * from user order by score) where score between ? and ?’, (low ,high))
其中?
作为占位符。
MySQL
import mysql.connector
conn = mysql.connector.connect(user='root', passward='pwd', database='test')
curcor = conn.cursor()
其中占位符为%s
其余操作Mysql与SQLite类似。
http://www.runoob.com/sqlite/sqlite-tutorial.html
有SQLite教程。