当前位置:首页 > 问答 > 正文

Python怎么连接数据库,读写数据那些事儿,简单点说怎么操作数据库里的内容

行,那咱们就直接说Python怎么操作数据库,说白了,操作数据库就三件事:连上它、从里面拿东西(读)、往里面放东西(写),下面我用最常用的 sqlite3(Python自带,不用装)和 pymysql(连MySQL用的)来举例子,道理都一样。

第一步:连上数据库

你想操作一个仓库,总得先把门打开吧?连接数据库就是开门。

连接SQLite数据库: SQLite是个小型的数据库,整个数据库就是一个文件,特别适合自己学着玩或者小型项目,Python自带sqlite3库,直接用就行。

import sqlite3
# 连接到一个数据库文件,如果文件不存在,它会自己创建一个
conn = sqlite3.connect('test.db')

这行代码执行完,你就拿到了一个连接对象 conn,这个就是你通往数据库的“大门”。

连接MySQL数据库: MySQL更常见于网站之类的正式项目,连接它需要先安装第三方库:pip install pymysql,连接时需要告诉Python数据库在哪、叫什么、用户名和密码是啥。

import pymysql
# 需要填你的数据库的实际信息
conn = pymysql.connect(
    host='localhost',  # 数据库服务器地址,本地就是localhost
    user='root',       # 用户名
    password='123456', # 密码
    database='test_db' # 你要连接的数据库名
)

同样,你也得到了一个连接对象 conn

第二步:找个“帮手”——创建游标

光打开门还不行,你得有个帮手帮你进去搬东西、放东西,这个帮手就叫“游标”(Cursor)。

# 无论是SQLite还是MySQL,创建游标的方法都一样
cursor = conn.cursor()

这个 cursor 对象就是你的帮手,后面几乎所有的操作(执行命令、拿数据)都要通过它。

第三步:操作数据库里的内容

现在门开了,帮手也有了,就可以干活了,主要就是执行SQL语句。

读数据(SELECT)

Python怎么连接数据库,读写数据那些事儿,简单点说怎么操作数据库里的内容

比如数据库里有张表叫 users,你想看看里面都有谁。

# 写一条SQL查询语句
sql = "SELECT * FROM users"
# 让游标执行这条语句
cursor.execute(sql)
# 从游标那里拿到所有结果
results = cursor.fetchall()
# 打印结果
for row in results:
    print(row)

fetchall() 是把所有结果一次性都拿出来,如果结果很多,怕内存吃不消,可以用 fetchone() 一次只拿一条,或者 fetchmany(5) 一次拿5条。

写数据(INSERT, UPDATE, DELETE)

  • 增加新数据(INSERT) 比如要新增一个用户。

    sql = "INSERT INTO users (name, age) VALUES (%s, %s)"  # MySQL用%s占位
    # 对于SQLite,占位符是问号 ?:VALUES (?, ?)
    # 要插入的具体数据,放在一个元组里
    data = ('张三', 25)
    # 执行SQL语句
    cursor.execute(sql, data)

    这里用了占位符 %s(MySQL)或 (SQLite),而不是直接把数据拼接到SQL字符串里。这非常重要! 可以防止“SQL注入”攻击,是一种安全规范。

  • 修改数据(UPDATE) 想把张三的年龄改成26。

    Python怎么连接数据库,读写数据那些事儿,简单点说怎么操作数据库里的内容

    sql = "UPDATE users SET age = %s WHERE name = %s"
    data = (26, '张三')
    cursor.execute(sql, data)
  • 删除数据(DELETE) 想删除张三这条记录。

    sql = "DELETE FROM users WHERE name = %s"
    data = ('张三',)
    cursor.execute(sql, data)

重要提示: 执行了写操作(增、删、改)之后,数据其实还没真正存到数据库里!它只是在你当前的这次连接中生效了。

第四步:确认改变和打扫战场

提交事务(Commit) 为了让你的修改真正永久保存到数据库里,你必须“确认”一下,这个动作叫提交。

conn.commit()

你可以每执行一次写操作就提交一次,也可以等所有操作都做完了一次性提交。

关闭帮手和门 事情做完了,要养成好习惯,把帮手(游标)和门(连接)都关上,释放资源。

cursor.close()
conn.close()

通常我们会用 with 语句来写,这样Python会自动帮我们关闭,更省心也更安全,比如连SQLite可以这样:

import sqlite3
with sqlite3.connect('test.db') as conn:
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM users")
    ... # 其他操作
# 出了with这个范围,conn和cursor会自动关闭,不用手动写close了

简单总结一下步骤:

  1. 连接conn = sqlite3.connect(...)pymysql.connect(...)
  2. 拿游标cursor = conn.cursor()
  3. 执行SQL
    • cursor.execute(SQL) -> cursor.fetchall()
    • cursor.execute(SQL, 数据) -> 一定要 conn.commit()
  4. 关闭cursor.close(), conn.close() (或用 with 语句自动关)

刚开始可能会觉得步骤有点多,但练几次就熟了,核心就是让Python通过SQL这个“数据库通用语言”去帮你办事,你先照着这个流程跑通,后面再慢慢深入了解细节。