如何通过Python的sqlite3模块连接本地SQLite数据库及执行脚本?
嘿,别担心,这些问题其实用Python自带的sqlite3模块就能全部搞定,完全不需要第三方软件,比MySQL的连接方式还简单呢!我给你一步步讲清楚:
连接已有的本地SQLite文件
你之前用:memory:连接内存数据库,换成本地文件路径就行啦!比如你的文件叫example.sqlite,和Python脚本在同一个文件夹里,直接写:
import sqlite3 con = sqlite3.connect("example.sqlite")
如果文件在其他目录,就写绝对路径:
- Windows系统:
con = sqlite3.connect("C:/Users/你的用户名/Documents/example.sqlite") - Linux/macOS系统:
con = sqlite3.connect("/home/你的用户名/example.sqlite")
连接上之后,就可以用游标(cursor)执行各种SQL操作了,和内存数据库的操作逻辑完全一样。
创建新的本地SQLite数据库文件
这个更简单!你只需要给connect()方法传一个不存在的文件名,它就会自动帮你创建这个数据库文件。比如你想新建一个my_new_db.sqlite:
con = sqlite3.connect("my_new_db.sqlite") # 随便执行点操作(比如创建表),然后提交 cursor = con.cursor() cursor.execute("CREATE TABLE IF NOT EXISTS products (id INTEGER PRIMARY KEY, name TEXT, price REAL)") con.commit() # 关闭连接后,文件就会出现在你的文件夹里了 con.close()
哪怕你什么操作都不做,只要调用了connect()并关闭连接,也会生成一个空的SQLite文件。
在Python模块内执行SQL脚本
有两种常用方式,看你需求选:
- 单条SQL语句执行:用
cursor.execute()就行,适合简单的操作:
cursor = con.cursor() # 比如插入数据(用占位符防止SQL注入) cursor.execute("INSERT INTO users (name) VALUES (?)", ("Alice",)) con.commit()
这里的占位符?是SQLite推荐的写法,一定要养成这个好习惯哦。
- 执行整个SQL脚本文件:如果你的SQL语句很多(比如建表、初始化数据的脚本),可以直接读取文件内容,用
executescript()执行:
假设你有个init_schema.sql文件,内容是:
CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT); CREATE TABLE IF NOT EXISTS orders (id INTEGER PRIMARY KEY, user_id INTEGER, amount REAL); INSERT INTO users (name) VALUES ("Bob"), ("Charlie");
那在Python里这么写:
import sqlite3 con = sqlite3.connect("example.sqlite") cursor = con.cursor() # 读取SQL脚本文件 with open("init_schema.sql", "r", encoding="utf-8") as f: sql_content = f.read() # 执行整个脚本 cursor.executescript(sql_content) con.commit() con.close()
executescript()会自动处理脚本里的多条SQL语句(用分号分隔的那种),非常方便。
对了,和你之前用MySQL的PyMySQL对比一下:SQLite是文件型数据库,不需要启动服务器,也不需要用户名、密码这些凭证,直接通过文件路径连接就行,这是它和MySQL这类客户端-服务器型数据库最大的区别。
内容的提问来源于stack exchange,提问作者user13646253




