Python操作SQLite数据库

本文详细介绍了如何在Python中使用SQLite进行数据库操作,包括安装、连接数据库、创建表、数据插入、查询和更新,以及使用JSON数据示例。
摘要由CSDN通过智能技术生成

SQLite 是一种轻量级的数据库引擎,广泛用于嵌入式设备和小型应用程序。在Python中,SQLite 是一个流行的选择,因为它易于使用、快速、可靠,并且无需独立的服务器进程。本文将深入探讨如何使用 Python 操作 SQLite 数据库,包括创建数据库、表格、插入数据、查询数据等。

主要优点是sqlite在Python中使用通常是以文件的形式存在, 这减少了很多配置工作,主要用于小型项目的数据上传保存。

安装Sqlite3

在 Python 中,SQLite3 已经内置,无需额外安装。可以直接 import sqlite3 来使用它。

import sqlite3

连接数据库

使用 connect() 函数连接到数据库,并返回一个 Connection 对象。

conn = sqlite3.connect('example.db')

同样支持指定路径

# 指定路径为 /path/to/your/database/example.db
conn = sqlite3.connect('/path/to/your/database/example.db')

创建表格

建表(如果已存在则报错)

# 建表(如果已存在则报错)
create_table_sql = """
CREATE TABLE users (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    age INTEGER
);
"""

conn.execute(create_table_sql)

建表(如果已存在则不做操作) 通常就使用这种方式

# 建表(如果已存在则不做操作)
create_table_sql = """
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    age INTEGER
);
"""

conn.execute(create_table_sql)

增删改查


# 插入数据
def insert_user(name, age):
    sql = "INSERT INTO users (name, age) VALUES (?, ?)"
    conn.execute(sql, (name, age))
    conn.commit()


# 删除数据
def delete_user(user_id):
    sql = "DELETE FROM users WHERE id = ?"
    conn.execute(sql, (user_id,))
    conn.commit()


# 更新数据
def update_user(user_id, new_name, new_age):
    sql = "UPDATE users SET name = ?, age = ? WHERE id = ?"
    conn.execute(sql, (new_name, new_age, user_id))
    conn.commit()


# 查询多个数据(返回list)
def fetch_users():
    sql = "SELECT * FROM users"
    return conn.execute(sql).fetchall()

# 查询一个数据
def fetch_users():
    sql = "SELECT * FROM users"
    return conn.execute(sql).fetchone()

# 查询指定数目数据(返回list)
def fetch_users():
    sql = "SELECT * FROM users"
    return conn.execute(sql).fetchmany(10) # 获取10行

综合案例

import json
import sqlite3


def get_connection_and_cursor():
    # 连接到 SQLite 数据库
    conn = sqlite3.connect('database.db')
    cursor = conn.cursor()
    return conn, cursor


def create_table():
    conn, cursor = get_connection_and_cursor()

    # 创建表
    cursor.execute('''CREATE TABLE IF NOT EXISTS output_data 
                      (gid INTEGER PRIMARY KEY, json_data TEXT)''')

    # 提交事务
    conn.commit()

    # 关闭游标
    cursor.close()


def insert_data(json_data):
    conn, cursor = get_connection_and_cursor()

    # 将 JSON 数据转换为字符串
    json_string = json.dumps(json_data)

    # 插入数据到表中
    cursor.execute("INSERT INTO output_data (json_data) VALUES (?)", (json_string,))

    # 提交事务
    conn.commit()

    # 关闭游标
    cursor.close()


def delete_data(gid):
    conn, cursor = get_connection_and_cursor()

    # 删除指定 gid 的数据
    cursor.execute("DELETE FROM output_data WHERE gid=?", (gid,))

    # 提交事务
    conn.commit()

    # 关闭游标
    cursor.close()


def update_data(gid, json_data):
    conn, cursor = get_connection_and_cursor()

    # 将 JSON 数据转换为字符串
    json_string = json.dumps(json_data)

    # 更新指定 gid 的数据
    cursor.execute("UPDATE output_data SET json_data=? WHERE gid=?", (json_string, gid))

    # 提交事务
    conn.commit()

    # 关闭游标
    cursor.close()


def retrieve_data(gid):
    conn, cursor = get_connection_and_cursor()

    # 检索指定 gid 的数据
    cursor.execute("SELECT json_data FROM output_data WHERE gid=?", (gid,))
    data = cursor.fetchone()

    # 关闭游标
    cursor.close()

    if data:
        # 将 JSON 字符串转换为对象并返回
        return json.loads(data[0])
    else:
        return None


def find_all_data():
    conn, cursor = get_connection_and_cursor()

    # 检索所有数据
    cursor.execute("SELECT gid, json_data FROM output_data")
    all_data = cursor.fetchall()

    # 关闭游标
    cursor.close()

    data_list = []
    for row in all_data:
        # 将每条记录的 gid 和 JSON 数据字符串转换为对象并添加到列表中
        data_list.append({"gid": row[0], "data": json.loads(row[1])})

    return data_list


# 创建表
create_table()
all_data = find_all_data()
print(all_data)

# 插入数据到表中
insert_data({
    "name": "John",
    "age": 30,
    "city": "New York"
})
insert_data({
    "name": "Jorben",
    "age": 20,
    "city": "Bei Jing"
})
insert_data({
    "name": "d0ublecl1ck",
    "age": 18,
    "city": "Hang Zhou"
})
all_data = find_all_data()
print(all_data)
# 删除指定 gid 的数据
delete_data(1)
all_data = find_all_data()
print(all_data)
# 更新指定 gid 的数据
update_data(2, {"name": "Alice", "age": 25, "city": "Los Angeles"})
all_data = find_all_data()
print(all_data)
# 检索指定 gid 的数据
retrieved_data = retrieve_data(2)
print(retrieved_data) 

# 检索所有数据
all_data = find_all_data()
print(all_data)

[]
[{'gid': 1, 'data': {'name': 'John', 'age': 30, 'city': 'New York'}}, {'gid': 2, 'data': {'name': 'Jorben', 'age': 20, 'city': 'Bei Jing'}}, {'gid': 3, 'data': {'name': 'd0ublecl1ck', 'age': 18, 'city': 'Hang Zhou'}}]
[{'gid': 2, 'data': {'name': 'Jorben', 'age': 20, 'city': 'Bei Jing'}}, {'gid': 3, 'data': {'name': 'd0ublecl1ck', 'age': 18, 'city': 'Hang Zhou'}}]
[{'gid': 2, 'data': {'name': 'Alice', 'age': 25, 'city': 'Los Angeles'}}, {'gid': 3, 'data': {'name': 'd0ublecl1ck', 'age': 18, 'city': 'Hang Zhou'}}]
{'name': 'Alice', 'age': 25, 'city': 'Los Angeles'}
[{'gid': 2, 'data': {'name': 'Alice', 'age': 25, 'city': 'Los Angeles'}}, {'gid': 3, 'data': {'name': 'd0ublecl1ck', 'age': 18, 'city': 'Hang Zhou'}}]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

D0ublecl1ck

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值