欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python 使用数据库(SQLite)

程序员文章站 2023-08-26 15:25:33
SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。 Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。 在使用 ......

SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。

Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。

在使用SQLite前,我们先要搞清楚几个概念:

表是数据库中存放关系数据的集合,一个数据库里面通常都包含多个表,比如学生的表,班级的表,学校的表,等等。表和表之间通过外键关联。

要操作关系数据库,首先需连接到数据库,一个数据库连接称为Connection

连接到数据库后,需要打开游标,称之为Cursor,通过Cursor执行SQL语句,然后,获得执行结果。

Python定义了一套操作数据库的API接口,任何数据库要连接到Python,只需要提供符合Python标准的数据库驱动即可。

由于SQLite的驱动内置在Python标准库中,所以我们可以直接来操作SQLite数据库

# 导入模块
import sqlite3

# ##### 使用数据库前
# 数据库文件路径
db_path = r'D:\test.db' # 物理(磁盘)存储(raw 字符串)
# 创建数据库连接
conn = sqlite3.connect(db_path)

def dict_factory(cursor, row):
    '''修改查询格式'''
    d = {}
    for idx, col in enumerate(cursor.description):
        d[col[0]] = row[idx]
    return d
# conn.row_factory = dict_factory

# 创建游标
cur = conn.cursor()

# ##### 数据库操作
sql = '''
create table if not exists tb_test(
    id integer primary key autoincrement,
    name varchar(20) not null,
    remark text
)
'''
# 执行SQL语句
cur.execute(sql)
sql = '''
    drop table tb_test
'''
# cur.execute(sql)
# ### insert
sql = '''
INSERT INTO tb_test(name, remark)
VALUES('zhangsan', '学习Python')
'''
# cur.execute(sql)
sql = '''
INSERT INTO tb_test(name, remark)
VALUES(?, ?)
'''
# ?, 参数格式化,避免SQL注入(安全)
# 不要使用str.format或者字符串拼接的方式来构造SQL语句(不安全)
stuents = [
    ('李斯', '统一文字,小篆'),
    ('唐三', '斗罗大陆'),
    ('王小二', '中国惊奇先生')
]
# 插入多条数据
# cur.executemany(sql, stuents)
# commit, 提交更改
conn.commit()

# ### select
sql = '''
SELECT
    COUNT(1) AS total,
    'test' AS test
FROM tb_test
'''
# 查询单个数据
cur.execute(sql)
result_one = cur.fetchone()
print(result_one)

sql = '''
SELECT *
FROM tb_test
WHERE name = ?
OR id < 3
'''
params = ('唐三',)
# 查询单条数据
cur.execute(sql, params)
result_one = cur.fetchone()
print(result_one)
# 查询多条数据
cur.execute(sql, params)
page_count = 2 # 一次查询的数据条数
result_many = cur.fetchmany(page_count)
print(result_many)
# 查询全部数据
cur.execute(sql, params)
result_all = cur.fetchall()
print(result_all)
"""
"""
# ### update
# ### delete


# ##### 使用数据库后
# 关闭游标
cur.close()
# 关闭数据库连接
conn.close()

初次发表,请多多关照