SQLite 数据库学习

1.install

复制代码
sudo apt update
sudo apt install sqlitebrowser

这是一个开源的图形用户界面工具,专门用于开发、管理和分析 SQLite 数据库。它支持创建或导入导出表、编辑数据、执行 SQL 查询等功能。

2.python 操作数据库

Python 内置了 sqlite3 模块,使得与 SQLite 数据库交互变得简单而直接。

  1. 创建连接
    首先,导入 sqlite3 模块并建立到数据库的连接。如果指定的数据库文件不存在,SQLite 会自动创建一个新的数据库文件。
py 复制代码
import sqlite3
# 建立连接
conn = sqlite3.connect('example.db')
# 创建游标对象
cursor = conn.cursor()
  • 创建表
py 复制代码
# 创建表
cursor.execute('''
CREATE TABLE IF NOT EXISTS stocks (
    date TEXT,
    trans TEXT,
    symbol TEXT,
    qty REAL,
    price REAL
)
''')
  • 插入数据
    向表中插入数据也很简单,可以使用参数化查询来避免 SQL 注入攻击。
py 复制代码
# 单条插入
cursor.execute("INSERT INTO stocks (date, trans, symbol, qty, price) VALUES (?, ?, ?, ?, ?)",
               ('2024-12-10', 'BUY', 'RHAT', 100, 35.14))

# 批量插入
purchases = [
    ('2024-01-05', 'BUY', 'IBM', 1000, 45.0),
    ('2024-06-17', 'SELL', 'MSFT', 500, 20.0),
]
cursor.executemany("INSERT INTO stocks (date, trans, symbol, qty, price) VALUES (?, ?, ?, ?, ?)", purchases)

# 提交事务
conn.commit()
  • 查询数据: 从表中检索数据同样可以通过执行 SQL 查询实现。
py 复制代码
# 简单查询
for row in cursor.execute("SELECT * FROM stocks ORDER BY price"):
    print(row)

# 条件查询
cursor.execute("SELECT * FROM stocks WHERE symbol=?", ('RHAT',))
print(cursor.fetchall())
  • 更新和删除数据: 你也可以更新或删除记录。
py 复制代码
# 更新
cursor.execute("UPDATE stocks SET qty = ? WHERE symbol = ?", (200, 'RHAT'))
conn.commit()

# 删除
cursor.execute("DELETE FROM stocks WHERE trans = ?", ('SELL',))
conn.commit()
  • 关闭连接: 完成所有操作后,确保关闭游标和连接以释放资源。
py 复制代码
cursor.close()
conn.close()
  • 使用上下文管理器:为了简化代码并确保资源被正确清理,可以使用上下文管理器 (with 语句):
py 复制代码
with sqlite3.connect('example.db') as conn:
    with conn:  # 自动提交
        cursor = conn.cursor()
        cursor.execute("INSERT INTO stocks VALUES ('2024-12-10', 'BUY', 'AAPL', 50, 200.1)")

完整python 代码:

py 复制代码
import sqlite3

# -------- 连接数据库 --------
# 建立连接
# conn = sqlite3.connect('/mnt/data2/exp_data/1208_sql_learn/example.db')
conn = sqlite3.connect('/mnt/data2/exp_data/1208_sql_learn/example.sq3')

# 创建游标对象
cursor = conn.cursor()

# -------- 创建表 --------
cursor.execute('''
CREATE TABLE IF NOT EXISTS stocks (
    date TEXT,
    trans TEXT,
    symbol TEXT,
    qty REAL,
    price REAL
)
''')

# -------- 插入数据 --------
# 单条插入
cursor.execute("INSERT INTO stocks (date, trans, symbol, qty, price) VALUES (?, ?, ?, ?, ?)",
               ('2024-12-10', 'BUY', 'RHAT', 100, 35.14))

# 批量插入
purchases = [
    ('2024-01-05', 'BUY', 'IBM', 1000, 45.0),
    ('2024-06-17', 'SELL', 'MSFT', 500, 20.0),
]
cursor.executemany("INSERT INTO stocks (date, trans, symbol, qty, price) VALUES (?, ?, ?, ?, ?)", purchases)

# 提交事务
conn.commit()

# -------- 查询数据 --------
# 简单查询
for row in cursor.execute("SELECT * FROM stocks ORDER BY price"):
    print(row)

def print_query_result(cursor, query='SELECT * FROM stocks ORDER BY price'):
    for row in cursor.execute(query):
        print(row)

# 条件查询
cursor.execute("SELECT * FROM stocks WHERE symbol=?", ('RHAT',))
print(cursor.fetchall())

# -------- 更新和删除 --------
# 更新
cursor.execute("UPDATE stocks SET qty = ? WHERE symbol = ?", (200, 'RHAT'))
conn.commit()
print_query_result(cursor)
# 删除
cursor.execute("DELETE FROM stocks WHERE trans = ?", ('SELL',))
conn.commit()
print_query_result(cursor)
# -------- 关闭连接 --------
cursor.close()
conn.close()

# # -------- 使用上下文管理器 --------
# with sqlite3.connect('example.db') as conn:
#     with conn:  # 自动提交
#         cursor = conn.cursor()
#         cursor.execute("INSERT INTO stocks VALUES ('2024-12-10', 'BUY', 'AAPL', 50, 200.1)")

3.SQL语句

python 也是调用的 sql 语句:

相关推荐
DBA_G1 小时前
南大通用GBase 8s数据库新存储引擎核心能力二
数据库·微服务·架构
一只小菜鸡..1 小时前
南京大学 操作系统 (JYY) 学习笔记:从 UNIX 到 Linux 与庞大的应用生态
笔记·学习·unix
MartinYeung52 小时前
[论文学习]迈向自主医疗人工智能智能体:MIRA系统深度分析
人工智能·学习
衣乌安、2 小时前
数据库事务原理与回滚机制
数据库
CodexDave3 小时前
PostgreSQL 明明有索引却选了 Nested Loop:从行数误判修正执行计划
数据库·postgresql·执行计划·扩展统计·nestedloop
熊猫钓鱼>_>3 小时前
ArkTS 装饰器总览:V1 / V2 / 通用装饰器完整学习笔记
笔记·学习·华为·交互·harmonyos·arkts·arkweb
czhaii5 小时前
STC ai助手单片机工程项目创建实例
数据库·mongodb
山峰哥5 小时前
数据库性能救星:Explain执行计划深度拆解
服务器·开发语言·数据库·sql·启发式算法
oradh6 小时前
Oracle 11g rac IP地址修改(public ip、vip、scan ip、priviate ip)
数据库·tcp/ip·oracle·rac ip地址修改
YOU OU6 小时前
Redis哨兵 & 集群
数据库·redis·sentinel