Python SQLite创建数据库和数据表及数据的增删改查

SQLite是一款轻型的SQL类型数据库,处理速度快且占用资源非常低,Python自带, 不需要配置不需要任何外部的依赖。数据库本身就是一个.db文件,非常适合存储本地数据。本文主要介绍Python 中 SQLite创建数据库和数据表及数据的增删改查。

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

推荐阅读
cjavapy编程之路首页