数据库是我们程序处理中常用的存储方式,后续我们的数据库实验都将在已有SQLite数据库文件的基础上去完成的。
关于SQLite数据库创建,用一句话:
创建SQLite数据库的本质就是连接一个文件。在Python中,使用 sqlite3.connect("文件名.db") 即可,如果文件不存在,SQLite会自动创建它。(如果存在,就打开读取)
一、语法详解
SQLite没有像MySQL那样的 CREATE DATABASE 语句。创建数据库的唯一途径是通过连接(Connection)接口。以Python为例,核心语法如下:
import sqlite3# 连接数据库文件。如果'ljybc_database.db'文件不存在,SQLite自动创建。conn = sqlite3.connect("ljybc_database.db")print("数据库创建/连接成功")conn.close() # 操作完毕后务必关闭连接
关键点:connect() 函数是核心。注意,在SQLite语境下,“连接数据库”与“创建数据库”是同一个操作。
实验使用了Python3.13版本,一般编程情况都用python的3.x版本以上。
二、错误写法与正确写法对比(错误驱动法)
常见错误1:硬套MySQL语法
错误写法:尝试使用SQL语句 CREATE DATABASE,这是MySQL/PostgreSQL的语法,在SQLite中无效。
报错提示:sqlite3.OperationalError: near "CREATE": syntax error
为什么错:SQLite是基于文件的轻量级数据库,其存储单元就是文件本身,因此没有单独的数据库创建命令。
正确写法:直接使用sqlite3.connect("新文件名.db")建立连接。
总结规律:对SQLite来说,连接即创建。
常见错误2:目录路径不存在
错误写法:conn = sqlite3.connect("data/school.db"),但 data/ 文件夹不存在。
报错提示:sqlite3.OperationalError: unable to open database file
为什么错:connect() 函数不会自动创建不存在的目录。
正确写法:先确保目录存在。
import sqlite3import os#先确保data文件夹存在if not os.path.exists('./data'): os.makedirs('./data')conn = sqlite3.connect('./data/ljy_database.db')print("数据库创建成功")conn.close()
os.makedirs(name, mode=0o777, exist_ok=False)
参数说明:
三、四种创建方法对比(按需选择)
SQLite创建数据库的方法对比,帮你根据场景快速决策:
四、新手必掉进的7大坑与爬坑指南
路径坑:连接文件前,其父目录必须已经存在(如前述)。
权限坑:程序运行时对目标路径没有写入权限,会导致创建失败(尤其在Linux/系统盘)。
并发坑(锁):SQLite使用文件锁实现并发控制。多个进程同时写入同一文件会触发 database is locked 错误。
缓解方案:设置 timeout 参数:sqlite3.connect("file.db", timeout=10) 让连接最多等待10秒。
避坑代码,以flask为例,每个请求单独写连接,老刘给你简单方案:
from flask import gdef get_db(): if 'db' not in g: g.db = sqlite3.connect('test.db') return g.db@app.teardown_appcontextdef close_db(exception): db = g.pop('db', None) if db is not None: db.close()
注意:高并发应用应考虑MySQL/PostgreSQL。4.提交坑:执行INSERT/UPDATE/DELETE后,数据并未立即写入磁盘,必须手动conn.commit()。5.线程坑:默认同一个数据库连接对象不能在多个线程间共享。
6.内存数据库坑(易失性):使用 sqlite3.connect(":memory:") 创建的数据库仅存在内存中,程序退出后数据彻底丢失,仅适合临时计算或测试。
7.缺乏CREATE DATABASE命令坑:再次强调,SQLite没有该命令,连接文件即创建。这是与MySQL最大的语法区别之一。
五、场景选择:SQLite vs MySQL
维度 | SQLite | MySQL |
|---|
架构 | 文件型,无需独立服务端 | 客户端-服务器架构 |
创建方式 | 连接文件即创建 | 执行 CREATE DATABASE SQL语句 |
核心优势 | 零配置、单文件、嵌入式友好 | 高并发、复杂查询、多用户管理 |
最佳适用 | 桌面应用、移动应用、嵌入式设备、原型开发、个人工具 | Web应用、企业级系统、需要高并发写入或复杂事务的场景 |
一句话决策:个人工具、本地应用、学习入门,选SQLite;网站、团队协作、高并发业务,选MySQL。
六、总结
创建核心:连接即创建,文件是数据库。
四大方法:命令行、Python、图形化、项目初始化,随需使用。
七大天坑:路径、权限、无CREATE、并发锁、要提交、线程安全、内存易失。避开提升效率90%。
选型法则:个人本地SQLite,团队在线MySQL。
掌握以上要点,你就能高效、正确地创建和使用SQLite数据库。
联系作者:刘金玉
长按关注公众号
编程创造城市官网:https://bcczcs.com
相关文章:
零基础数据库入门第1课
零基础数据库入门第2课:SQLite入门
零基础数据库入门第3课:数据库基础理论知识入门
零基础数据库入门第4课:关系型数据库三范式
零基础数据库入门第5课:sqlite数据类型
零基础数据库入门第6课:sqlite数据库字段非空、主键、自增、唯一、默认、检查、排序规则、外键分别怎么理解?