Skip to content

连接SQLite数据库

在现代应用程序中,数据库用于存储和管理数据。除了 SQLite,常见的数据库还有 MySQL、PostgreSQL、MongoDB 和 Oracle 等。每种数据库都有其特定的用途和优势。

常见数据库简介

  1. MySQL:一个开源的关系型数据库管理系统,广泛应用于Web开发。它支持高效的查询处理,并且有强大的社区支持。

  2. PostgreSQL:一个功能强大的开源对象关系型数据库系统,支持复杂查询、外键、触发器、视图等高级功能,适用于需要高度扩展性和标准合规性的场景。

  3. MongoDB:一个开源的NoSQL文档数据库,采用文档模型存储数据,灵活且易于扩展,适合处理大规模的非结构化数据。

  4. Oracle:一个商业关系型数据库管理系统,以其稳定性和高性能著称,广泛应用于企业级应用中,支持复杂的事务处理和数据安全功能。

SQLite 的优势

SQLite 是一个轻量级的、嵌入式的关系型数据库管理系统,具有以下几个显著的优势:

  1. 轻量级:SQLite 不需要单独的服务器进程或系统资源,它将数据库引擎嵌入到应用程序中,减少了数据库的管理开销。

  2. 零配置:SQLite 是自包含的,不需要进行安装或配置,使用起来非常简单,适合小型到中型应用。

  3. 文件存储:所有数据存储在一个单独的文件中,这使得数据库的备份和迁移非常方便。

  4. 事务支持:SQLite 支持事务处理,能够保证数据的完整性和一致性,即使在系统崩溃时也能保持数据的安全。

  5. 跨平台:SQLite 在多个平台上都可以使用,如 Windows、Linux、macOS 和移动平台,提供了很好的兼容性。

  6. 高性能:对于小到中型应用,SQLite 提供了足够的性能,并且在高并发读取操作的情况下表现良好。

SQLite 是一个非常适合快速开发、嵌入式应用和小型项目的数据库解决方案。在本节中,我们将使用 SQLite 来存储和管理数据,并展示如何通过 Tkinter 与 SQLite 数据库进行交互。

1. 连接到 SQLite 数据库

使用 sqlite3.connect() 方法可以连接到 SQLite 数据库。如果数据库文件不存在,SQLite 会自动创建一个新的数据库文件。

示例代码

Python
import sqlite3

# 连接到 SQLite 数据库(如果数据库文件不存在,会自动创建)
conn = sqlite3.connect('example.db')

# 创建一个 Cursor 对象,用于执行 SQL 查询
cursor = conn.cursor()

# 执行 SQL 查询
cursor.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)')

# 提交更改
conn.commit()

# 关闭连接
conn.close()

2. 插入数据

可以使用 INSERT INTO SQL 语句向数据库表中插入数据。

示例代码

Python
import sqlite3

# 连接到 SQLite 数据库
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

# 插入数据
cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Alice', 30))
cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Bob', 25))

# 提交更改
conn.commit()

# 关闭连接
conn.close()

3. 查询数据

可以使用 SELECT SQL 语句从数据库中查询数据。

示例代码

Python
import sqlite3

# 连接到 SQLite 数据库
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

# 查询数据
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall()  # 获取所有结果

for row in rows:
    print(row)

# 关闭连接
conn.close()

4. 更新和删除数据

可以使用 UPDATEDELETE SQL 语句更新或删除数据。

示例代码

Python
import sqlite3

# 连接到 SQLite 数据库
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

# 更新数据
cursor.execute('UPDATE users SET age = ? WHERE name = ?', (31, 'Alice'))

# 删除数据
cursor.execute('DELETE FROM users WHERE name = ?', ('Bob',))

# 提交更改
conn.commit()

# 关闭连接
conn.close()

5. 与 Tkinter 集成

将 SQLite 数据库操作与 Tkinter 界面集成,可以通过按钮或其他控件触发数据库操作。例如,从文本框中读取用户输入,并将其插入到数据库中。

示例代码(录入学生行姓名、科目、成绩)

Python
from tkinter import *
from tkinter import ttk
import sqlite3

# 连接到 SQLite 数据库
def create_table():
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()
    cursor.execute('CREATE TABLE IF NOT EXISTS records (id INTEGER PRIMARY KEY, name TEXT, subject TEXT, score INTEGER)')
    conn.commit()
    conn.close()

def insert_data():
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()
    name = name_entry.get()
    subject = subject_combobox.get()
    score = score_entry.get()
    cursor.execute('INSERT INTO records (name, subject, score) VALUES (?, ?, ?)', (name, subject, score))
    conn.commit()
    conn.close()
    name_entry.delete(0, END)
    subject_combobox.set('')  # Reset the combobox selection
    score_entry.delete(0, END)
    update_treeview()

def update_treeview():
    # 清空表格内容
    for row in tree.get_children():
        tree.delete(row)
    # 查询数据并更新表格
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()
    cursor.execute('SELECT * FROM records')
    rows = cursor.fetchall()
    for row in rows:
        tree.insert('', END, values=row[1:])
    conn.close()

# 创建顶层窗口对象
root = Tk()
root.geometry('1024x768')

# 创建并添加控件到主窗口
frame1 = Frame(root)
frame1.pack(pady=10)

Label(frame1, text='姓名').pack(side=LEFT, padx=5)
name_entry = Entry(frame1)
name_entry.pack(side=LEFT, padx=5)

Label(frame1, text='科目').pack(side=LEFT, padx=5)
subject_combobox = ttk.Combobox(frame1, values=['数学', '英语', '语文', '物理'])
subject_combobox.pack(side=LEFT, padx=5)

Label(frame1, text='成绩').pack(side=LEFT, padx=5)
score_entry = Entry(frame1)
score_entry.pack(side=LEFT, padx=5)

Button(root, text='添加记录', command=insert_data).pack(pady=10)

# 创建表格
columns = ('姓名', '科目', '成绩')
tree = ttk.Treeview(root, columns=columns, show='headings', height=10)

# 设置表头和列宽
for col in columns:
    tree.heading(col, text=col)
    tree.column(col, width=150, anchor='center')

tree.pack(pady=10)

# 创建表格并初始化表格内容
create_table()
update_treeview()

root.mainloop()

总结

  • 连接到数据库:使用 sqlite3.connect() 方法。
  • 插入数据:使用 INSERT INTO 语句。
  • 查询数据:使用 SELECT 语句。
  • 更新和删除数据:使用 UPDATEDELETE 语句。
  • 与 Tkinter 集成:通过 Tkinter 的控件触发数据库操作。

SQLite 是一个非常适合嵌入式应用的轻量级数据库,适用于小型应用和原型开发。结合 Tkinter,可以轻松构建图形化的数据库应用程序。


Released under the MIT License