【2025年8月最新动态】随着移动应用和小型项目持续增长,SQLite作为轻量级数据库引擎的使用率在开发者社区中攀升了23%,特别是在边缘计算和物联网设备中,SQLite因其零配置和单文件特性成为首选解决方案。
SQLite可不像那些需要独立服务器进程的大型数据库系统,它直接把数据库存在一个普通文件里,特别适合移动应用、小型工具或者需要本地存储的场景,我最近做的几个小程序都用到了它,简单方便得很。
确保你电脑上装了SQLite,现在大多数系统都预装了,如果没有,去官网下个二进制文件就行,Python的话,标准库里的sqlite3模块就能直接用,特别省心。
import sqlite3
操作数据库第一步当然是连接啦,SQLite连接特别简单,文件不存在还会自动创建:
# 连接到数据库(如果不存在则创建) conn = sqlite3.connect('my_database.db') # 创建游标对象 cursor = conn.cursor()
咱们先建个用户表玩玩:
cursor.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER, email TEXT UNIQUE, join_date TEXT DEFAULT CURRENT_TIMESTAMP ) ''')
空表没意思,加点数据进去:
users_data = [ ('张三', 28, 'zhangsan@example.com'), ('李四', 32, 'lisi@example.com'), ('王五', 25, 'wangwu@example.com'), ('赵六', 40, 'zhaoliu@example.com') ] cursor.executemany('INSERT INTO users (name, age, email) VALUES (?, ?, ?)', users_data) conn.commit() # 记得提交事务!
最基本的查询,把表里所有数据都捞出来:
cursor.execute('SELECT * FROM users') all_users = cursor.fetchall() print("所有用户:") for user in all_users: print(user)
加个WHERE子句筛选特定条件的记录:
# 查询年龄大于30的用户 cursor.execute('SELECT * FROM users WHERE age > ?', (30,)) older_users = cursor.fetchall() print("\n年龄大于30的用户:") for user in older_users: print(user)
结果排序用ORDER BY:
# 按年龄降序排列 cursor.execute('SELECT * FROM users ORDER BY age DESC') sorted_users = cursor.fetchall() print("\n按年龄降序排列:") for user in sorted_users: print(user)
找名字里带"三"的用户:
cursor.execute('SELECT * FROM users WHERE name LIKE ?', ('%三%',)) matching_users = cursor.fetchall() print("\n名字包含'三'的用户:") for user in matching_users: print(user)
统计用户平均年龄:
cursor.execute('SELECT AVG(age) FROM users') avg_age = cursor.fetchone()[0] print(f"\n用户平均年龄:{avg_age:.1f}岁")
按年龄段分组统计:
cursor.execute(''' SELECT CASE WHEN age < 20 THEN '20岁以下' WHEN age BETWEEN 20 AND 29 THEN '20-29岁' WHEN age BETWEEN 30 AND 39 THEN '30-39岁' ELSE '40岁及以上' END AS age_group, COUNT(*) AS user_count FROM users GROUP BY age_group ''') print("\n按年龄段分组统计:") for group in cursor.fetchall(): print(f"{group[0]}: {group[1]}人")
Python的with语句可以让代码更安全,自动处理连接关闭:
with sqlite3.connect('my_database.db') as conn: cursor = conn.cursor() cursor.execute('SELECT count(*) FROM users') count = cursor.fetchone()[0] print(f"\n总用户数:{count}")
参数化查询:一定要用问号占位符(?)的方式,不要直接拼接SQL字符串,防止SQL注入攻击。
批量操作:executemany()比循环执行execute()快得多,特别是插入大量数据时。
获取列名:有时候需要知道返回结果的列名:
cursor.execute('SELECT * FROM users LIMIT 1') col_names = [description[0] for description in cursor.description] print("\n列名:", col_names)
# 查询最近30天加入的用户 cursor.execute(''' SELECT name, join_date FROM users WHERE date(join_date) >= date('now', '-30 days') ''')
问题1:查询结果中文显示乱码
解决:确保数据库连接时指定正确的编码,比如conn = sqlite3.connect('my_db.db', isolation_level=None, detect_types=sqlite3.PARSE_DECLTYPES, check_same_thread=False, uri=True)
问题2:性能慢 解决:对于大量数据操作,可以:
PRAGMA journal_mode=WAL
)问题3:数据库被锁 解决:确保每次操作后及时关闭连接,或者使用with语句自动管理
虽然with语句能自动处理,但显式关闭是好习惯:
cursor.close() conn.close()
SQLite虽然简单,但功能一点也不弱,我有个项目用SQLite处理了超过10万条数据,照样跑得飞快,关键是要用对方法,该加索引加索引,该优化查询优化查询。
希望这些实例代码能帮你快速上手SQLite查询操作,实际开发中你会遇到更复杂的需求,但基本原理都是相通的,多练习几次,数据库操作就会变得跟喝水一样自然啦!
本文由 卿抒怀 于2025-08-03发表在【云服务器提供商】,文中图片由(卿抒怀)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/524480.html
发表评论