当前位置: 技术文章>> Python 如何操作 SQLite 数据库?

文章标题:Python 如何操作 SQLite 数据库?
  • 文章分类: 后端
  • 7784 阅读

在Python中操作SQLite数据库是一种高效且轻量级的数据管理方式,尤其适合于小型项目、原型开发或测试环境。SQLite作为一个嵌入式的SQL数据库引擎,无需配置服务器即可使用,它直接将数据库存储为一个文件,这使得数据库管理变得简单直接。接下来,我将详细介绍如何在Python中通过标准库sqlite3模块来操作SQLite数据库,包括创建数据库、执行SQL语句、处理查询结果以及数据库连接管理等方面。

引入sqlite3模块

在Python中操作SQLite数据库,首先需要导入sqlite3模块。这个模块是Python标准库的一部分,因此无需额外安装即可使用。

import sqlite3

创建和连接数据库

创建或连接数据库

使用sqlite3.connect()函数可以创建(如果数据库文件不存在)或连接到(如果数据库文件已存在)一个SQLite数据库。这个函数返回一个连接对象,通过该对象可以执行SQL命令。

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

创建Cursor对象

通过连接对象,我们可以创建一个Cursor对象。Cursor对象允许我们执行SQL命令并处理结果。

cursor = conn.cursor()

创建表

接下来,我们可以使用Cursor对象来执行SQL命令,比如创建一个表。

# 创建一个表
cursor.execute('''CREATE TABLE IF NOT EXISTS stocks
               (date text, trans text, symbol text, qty real, price real)''')

这里,execute()方法用于执行SQL命令。CREATE TABLE IF NOT EXISTS确保如果表已经存在,不会抛出错误。

插入数据

插入数据同样使用execute()方法,并传入相应的SQL命令和参数(如果需要的话)。

# 插入一行记录
cursor.execute("INSERT INTO stocks VALUES ('2023-04-01','BUY','RHAT',100,35.14)")

# 对于需要参数化的SQL语句,使用占位符(?)来避免SQL注入
t = ('2023-04-02', 'SELL', 'IBM', 50, 91.1)
cursor.execute('INSERT INTO stocks VALUES (?,?,?,?,?)', t)

# 提交事务
conn.commit()

注意,在插入数据后,需要调用conn.commit()来提交事务,确保数据被保存到数据库文件中。

查询数据

查询数据通常涉及到使用execute()方法执行SELECT语句,并通过Cursor对象处理结果。

# 查询数据
cursor.execute('SELECT * FROM stocks WHERE symbol=?', ('RHAT',))

# 获取所有查询结果
rows = cursor.fetchall()
for row in rows:
    print(row)

# 或者,使用fetchone()获取单条记录
cursor.execute('SELECT * FROM stocks WHERE symbol=?', ('IBM',))
row = cursor.fetchone()
print(row)

这里使用了参数化查询(?作为占位符),这是一种防止SQL注入的安全做法。

更新和删除数据

更新和删除数据同样使用execute()方法,并传入相应的SQL命令和参数。

# 更新数据
cursor.execute('UPDATE stocks SET price = 35.10 WHERE symbol = ?', ('RHAT',))
conn.commit()

# 删除数据
cursor.execute('DELETE FROM stocks WHERE symbol = ?', ('IBM',))
conn.commit()

使用with语句管理连接

为了确保即使在发生异常时也能正确关闭数据库连接,推荐使用with语句来管理sqlite3.connect()的上下文。

with sqlite3.connect('example.db') as conn:
    cursor = conn.cursor()
    cursor.execute('SELECT * FROM stocks')
    rows = cursor.fetchall()
    for row in rows:
        print(row)
# 当with语句块结束时,连接会自动关闭

处理异常

在数据库操作中,处理异常是非常重要的。可以使用try...except块来捕获并处理可能发生的异常。

try:
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()
    # 假设这里执行一些数据库操作
    conn.commit()
except sqlite3.Error as e:
    print(f"An error occurred: {e}")
finally:
    if conn:
        conn.close()

实用技巧与最佳实践

  1. 参数化查询:始终使用参数化查询来避免SQL注入攻击。
  2. 使用with语句:利用with语句自动管理数据库连接的打开和关闭。
  3. 异常处理:对数据库操作进行异常处理,确保程序的健壮性。
  4. 定期备份:对于重要数据,定期备份数据库文件。
  5. 使用索引:对于经常查询的列,使用索引可以提高查询效率。

结语

通过sqlite3模块,Python为SQLite数据库提供了强大的操作能力。从创建和连接数据库、创建表、插入数据、查询数据到更新和删除数据,Python都能以简洁明了的方式实现。结合良好的编程习惯和最佳实践,可以有效地利用SQLite数据库来管理应用程序的数据。

在探索和实践的过程中,不妨关注“码小课”网站,这里不仅有详细的教程和示例代码,还有丰富的技术文章和社区讨论,帮助你更深入地理解并应用Python和SQLite数据库。无论是初学者还是有一定经验的开发者,都能在这里找到适合自己的学习资源和技术支持。

推荐文章