# 基于表(Table)的一对多的关系就是关系数据库的基础。
# 表是数据库中存放关系数据的集合,一个数据库里面通常都包含多个表,表和表之间通过外键关联。
# 首先连接到数据库,一个数据库连接称为Connection;
# 连接到数据库后,需要打开游标,称之为Cursor,通过Cursor执行SQL语句,然后,获得执行结果。
import sqlite3 as SQL
# 如果文件不存在,会自动在当前目录创建,timeout默认为5
# Connection和Cursor对象,打开后一定记得关闭
conn=SQL.connect('SQL\test.db',timeout=5)
# 创建在内存上面,执行完任何操作后,都不需要提交事务的(commit)
# conn = sqlite3.connect('"memory:')
# 创建一个Cursor.
cursor=conn.cursor()
# 执行语句
# 使用Cursor对象执行insert,update,delete语句时,执行结果由rowcount返回影响的行数,就可以拿到执行结果。
# 使用Cursor对象执行select语句时,通过featchall()可以拿到结果集。结果集是一个list,每个元素都是一个tuple,对应一行记录。
# 如果SQL语句带有参数,那么需要把参数按照位置传递给execute()方法,有几个?占位符就必须对应几个参数,参数用元组方式传入。
# REAL:浮点数,存储为IEEE 8byte浮点数
# TEXT:文本字符串,缺省的编码为utf-8
# INT:带符号的整数,根据值的大小,自动存储为1,2,3,4,5,8字节6种
# char :字符
cursor.execute('create table user (id INT primary key , name varchar(20) not null)')
# 添加列
#cursor.execute('ALTER TABLE user ADD COLUMN age int')
# 插入数据
cursor.execute(r"insert into user (id, name) values (1, 'huang1')")
cursor.execute(r"insert into user (id, name) values (2, 'huang2')")
# 通过rowcount获得插入的行数:
print(cursor.rowcount)
# 获取查询结果集中所有(剩余)的行,返回一个列表。当没有可用的行时,则返回一个空的列表。
cursor.execute('select * from user')
values = cursor.fetchall()
print(values)
cursor.execute(r"UPDATE user set name = 'qiang' where ID=2")
# 通过rowcount获得插入的行数:
print(cursor.rowcount)
cursor.execute('select * from user')
values = cursor.fetchall()
print(values)
cursor.execute('DELETE from user where ID=2')
# 通过rowcount获得插入的行数:
print(cursor.rowcount)
cursor.execute('select * from user')
values = cursor.fetchall()
print(values)
# 关闭游标
cursor.close()
# 该方法回滚自上一次调用 commit() 以来对数据库所做的更改。
# conn.rollback()
# commit-->close
# 提交事务:
conn.commit()
conn.close()