Python操作数据库需依类型选择驱动:SQLite用内置sqlite3模块,MySQL需安装pymysql等第三方库;核心在于正确连接、安全查询(?占位防注入)、显式提交(commit)及用with自动管理资源。
Python操作数据库主要靠第三方库,SQLite用内置的sqlite3,MySQL需安装pymysql或mysql-connector-python。关键不是装什么,而是怎么连、怎么查、怎么防错。
Python自带sqlite3模块,适合本地开发、小项目或测试。它把整个数据库存成一个文件,没有服务端,开箱即用。
sqlite3.connect("db.sqlite"),文件不存在会自动创建cursor.execute()执行SQL,参数用?占位(防SQL注入),比如cur.execute("INSERT INTO user(name) VALUES (?)", ("Alice",))
conn.commit(),否则不生效;用完记得conn.close(),或更稳妥地用with sqlite3.connect(...) as conn:自动关闭MySQL需要额外安装客户端驱动。推荐pymysql(纯Python,安装快)或mysql-connector-python(官方维护)。连接时要提供主机、端口、用户名、密码和数据库名。
pip install pymysql
conn = pymysql.connect(host="localhost", port=3306, user="root", password="123456", database="testdb", charset="utf8mb4")
cursorclass=pymysql.cursors.DictCursor可返回字典,字段名直接当key用
conn.commit()提交修改,用try...except...finally确保异常时也能关闭连接不管是SQLite还是MySQL,手动关连接容易漏。用with语句能自动处理打开和关闭,还能减少嵌套层级。
with sqlite3.connect("app.db") as conn: → 自动commit(成功)或rollback(异常)并closewith pymysql.connect(...) as conn: → 同样自动关闭,但不会自动commit,需显式调用conn.commit()或设autocommit=True
新手常卡在连接失败、中文乱码、SQL报错这几处,其实多数有固定解法。
host是不是写成了127.0.0.1(某些配置下不认),换成localhost试试;确认MySQL服务已启动,且用户有对应主机访问权限CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci,Python连接里加charset="utf8mb4"