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()