1、创建数据库和数据表
数据库文件在创建表时,不存在则会自动创建。另外,如使用:memory:
代替文件路径,则存储在内存里而不是数据库文件。
import sqlite3
import os
dbPath = '/home/cjavapy.db'
if not os.path.exists(dbPath):
conn = sqlite3.connect(dbPath)
c = conn.cursor()
c.execute('''create table UserInfo
(id int primary key not null,
name text not null,
age int not null,
birth char(100));''')
conn.commit()
conn.close()
常用的数据类型:
类型 | 关键字 | 说明 |
BLOB | none | 空 |
NONE | none | 空 |
BIGINT | int | 整型 |
INTEGER | integer | 整型 |
INT | int | 整型 |
DOUBLE | double | 浮点型 |
REAL | real | 浮点型 |
NUMERIC | numeric | 精确数值型,numeric与decimal相同 |
DECIMAL(p,s) | decimal | 精确数值型,p是精确值,s是小数位数 |
BOOLEAN | bool | 布尔类型 |
STRING | string | 字符串类型 |
TEXT | text | 字符串类型 |
VARCHAR | varchar | 字符串类型 |
CHAR | char | 字符串类型 |
DATA | data | 时间类型,以 YYYY-MM-DD 格式返回日期 |
TIME | time | 时间类型,以 HH:MM:SS 格式返回时间 |
DATETIME | datetime | 时间类型,以 YYYY-MM-DD HH:MM:SS 格式返回 |
2、查询数据
import sqlite3
# 因为是本地文件,所以只需指定db文件位置即可,如果该文件不存在它会自动创建
# 也可以使用":memory:"代替文件路径,则存储在内存里而不是数据库文件
conn = sqlite3.connect('/home/cjavapy.db')
# 获取游标
cur = conn.cursor()
# 执行SQL
data=(11,)
cursor.execute("SELECT * FROM OrderInfo where ID =?",data)
# 获取查询结果
cur.fetchone() # 取出第一条,返回元组或None
cur.fetchall() # 取出所有(返回列表套元组或空列表)
cur.fetchmany(6) # 取出指定数量(返回列表套元组或空列表)
# 提交(如果有DML操作则需要提交事务才生效)
conn.commit()
# 受影响行数
print(cur.rowcount)
# 记得关闭游标和连接,避免内存泄露
cur.close()
conn.close()
3、增删改查
import sqlite3
conn = sqlite3.connect('/home/cjavapy.db')
cur = conn.cursor()
try:
# 插入单条语句
insert_sql = """INSERT INTO UserInfo(id, name, age,birth) VALUES(1, 'levi', 2,'1997-11-11');"""
cur.execute(insert_sql)
print("rowcount1:", cur.rowcount) # 结果:1
# 插入多条语句,注意sqlite使用?做占位符
insert_many_sql = """INSERT INTO UserInfo(id, name, age,birth) VALUES(?,?, ?,?);"""
data_list = [(11, 'Lynn', 22,'1997-11-12'), (12, 'John', 22,'1997-11-13')]
cur.executemany(insert_many_sql, data_list)
print("rowcount2:", cur.rowcount) # 结果:2
# 更新操作
data=(12,)
cur.execute("""update gas_price set coin_name="fil" where id=?; """,data)
print("rowcount3:", cur.rowcount) # 结果:1
# 删除操作
data=(12,)
cur.execute("delete from gas_price where id=?;",data)
# 查询
cur.execute("select * from gas_price where id > 2;")
print(cur.fetchone()) # 取出第一个,返回元组或None,
print(cur.fetchone()) # 取出第二个,每取一个游标里就少一个
print(cur.fetchall()) # 返回一个列表套元组或空列表
conn.commit()
except Exception as e:
print(str(e))
finally:
cur.close()
conn.close()