当前位置:首页>python>零基础数据库入门第7课:从命令行到Python,SQLite数据库创建的四种方法对比分析

零基础数据库入门第7课:从命令行到Python,SQLite数据库创建的四种方法对比分析

  • 2026-09-02 20:30:33
零基础数据库入门第7课:从命令行到Python,SQLite数据库创建的四种方法对比分析

数据库是我们程序处理中常用的存储方式,后续我们的数据库实验都将在已有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()
实验效果中同时创建了文件夹和数据库文件。
  • 总结规律:connect()只负责创建文件,不负责创建目录,路径必须有效。

  • 若要创建目录:使用os的makedirs函数,该函数可以创建多级目录。

os.makedirs(name, mode=0o777, exist_ok=False)

参数说明:

三、四种创建方法对比(按需选择)

SQLite创建数据库的方法对比,帮你根据场景快速决策:

四、新手必掉进的7大坑与爬坑指南

  1. 路径坑:连接文件前,其父目录必须已经存在(如前述)。

  2. 权限坑:程序运行时对目标路径没有写入权限,会导致创建失败(尤其在Linux/系统盘)。

  3. 并发坑(锁):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.线程坑:默认同一个数据库连接对象不能在多个线程间共享。

    • 危险方案(需谨慎):使用 check_same_thread=False 参数(如 sqlite3.connect("test.db", check_same_thread=False)),但线程安全需程序员自行通过锁保证。

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数据库字段非空、主键、自增、唯一、默认、检查、排序规则、外键分别怎么理解?

最新文章

随机文章