Python后端学习系列(3):数据库连接与操作(使用MySQL、SQLite等)

部署运行你感兴趣的模型镜像

Python后端学习系列(3):数据库连接与操作(使用MySQL、SQLite等)

前言

经过前面两期对Python后端开发中Web请求处理以及RESTful API设计的学习,我们已经能够构建出对外提供接口的Web应用了。但在实际的后端开发中,往往需要持久化存储数据,这就离不开数据库的使用啦。在本期内容中,我们将聚焦常见数据库的连接与操作,让我们的后端应用能够与数据库进行交互,更好地实现业务功能,一起来看看吧。

一、常见数据库介绍

1. MySQL

  • 特点:开源、功能强大、支持多种操作系统,广泛应用于各类Web应用、企业级系统等,有着良好的性能表现,对事务处理的支持也很完善,适合中大型项目的数据存储需求。
  • 应用场景举例:电商平台的商品信息、订单数据、用户账号等都可以用MySQL进行存储和管理。

2. SQLite

  • 特点:轻量级,无需独立的服务器进程,直接以文件形式存储数据库,易于部署和使用,适合小型项目或者嵌入式设备等对资源要求不高、数据量不大的场景。
  • 应用场景举例:移动端应用的本地缓存数据、简单的小型工具软件的数据存储等可以选择SQLite。

3. PostgreSQL

  • 特点:功能丰富,支持复杂的查询、高级的数据类型、扩展性强,对数据完整性和并发控制有很好的处理机制,在地理信息系统、数据分析等领域应用较多。
  • 应用场景举例:地图类应用存储地理坐标数据、科研项目中存储实验数据等场景可使用PostgreSQL。

二、Python数据库驱动安装与配置

1. MySQL数据库驱动(以mysql-connector-python为例)

pip install mysql-connector-python

安装完成后,在Python代码中连接MySQL数据库示例如下:

import mysql.connector

# 建立连接
mydb = mysql.connector.connect(
    host="localhost",  # 数据库主机地址
    user="your_user",  # 用户名
    password="your_password",  # 密码
    database="your_database"  # 要连接的数据库名
)

# 创建游标
mycursor = mydb.cursor()

# 后续可以进行相应的数据库操作,操作完成后记得关闭游标和连接
mycursor.close()
mydb.close()

2. SQLite数据库驱动(Python内置了SQLite3模块)

无需额外安装,直接使用即可,示例代码如下:

import sqlite3

# 建立连接
conn = sqlite3.connect('example.db')  # 创建或连接到名为example.db的数据库文件
# 创建游标
c = conn.cursor()

# 后续进行数据库操作,比如创建表
c.execute('''CREATE TABLE IF NOT EXISTS stocks
             (date text, trans text, symbol text, qty real, price real)''')

# 操作完成后关闭游标和连接
c.close()
conn.close()

三、基本的增删改查操作示例

1. MySQL中的增删改查

插入数据(Insert)
import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",
    user="your_user",
    password="your_password",
    database="your_database"
)
mycursor = mydb.cursor()

sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = ("John Doe", "Highway 21")
mycursor.execute(sql, val)

mydb.commit()  # 提交事务,使插入生效
print(mycursor.rowcount, "record inserted.")

mycursor.close()
mydb.close()
查询数据(Select)
import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",
    user="your_user",
    password="your_password",
    database="your_database"
)
mycursor = mydb.cursor()

mycursor.execute("SELECT * FROM customers")

result = mycursor.fetchall()
for row in result:
    print(row)

mycursor.close()
mydb.close()
更新数据(Update)
import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",
    user="your_user",
    password="your_password",
    database="your_database"
)
mycursor = mydb.cursor()

sql = "UPDATE customers SET address = %s WHERE name = %s"
val = ("Canyon 123", "John Doe")
mycursor.execute(sql, val)

mydb.commit()
print(mycursor.rowcount, "record(s) affected")

mycursor.close()
mydb.close()
删除数据(Delete)
import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",
    user="your_user",
    password="your_password",
    database="your_database"
)
mycursor = mydb.cursor()

sql = "DELETE FROM customers WHERE name = %s"
val = ("John Doe",)
mycursor.execute(sql, val)

mydb.commit()
print(mycursor.rowcount, "record(s) deleted")

mycursor.close()
mydb.close()

2. SQLite中的增删改查

插入数据(Insert)
import sqlite3

conn = sqlite3.connect('example.db')
c = conn.cursor()

# 插入数据
c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY','RHAT',100,35.14)")

conn.commit()
c.close()
conn.close()
查询数据(Select)
import sqlite3

conn = sqlite3.connect('example.db')
c = conn.cursor()

c.execute("SELECT * FROM stocks")
result = c.fetchall()
for row in result:
    print(row)

c.close()
conn.close()
更新数据(Update)
import sqlite3

conn = sqlite3.connect('example.db')
c = conn.cursor()

c.execute("UPDATE stocks SET price = 36.00 WHERE symbol = 'RHAT'")

conn.commit()
c.close()
conn.close()
删除数据(Delete)
import sqlite3

conn = sqlite3.connect('example.db')
c = conn.cursor()

c.execute("DELETE FROM stocks WHERE symbol = 'RHAT'")

conn.commit()
c.close()
conn.close()

四、数据库事务处理

  • 事务概念:事务是一组数据库操作,要么全部成功执行,要么全部不执行,保证数据的一致性和完整性。比如银行转账,从一个账户扣款和向另一个账户收款这两个操作要作为一个事务来处理,确保要么转账成功,要么转账失败两边都不发生变化。
  • 在MySQL中使用事务示例(以Python代码操作)
import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",
    user="your_user",
    password="your_password",
    database="your_database"
)
mycursor = mydb.cursor()

try:
    mydb.start_transaction()
    # 执行多条数据库操作,比如先插入一条记录,再更新一条记录
    sql_insert = "INSERT INTO accounts (name, balance) VALUES (%s, %s)"
    val_insert = ("Alice", 1000)
    mycursor.execute(sql_insert, val_insert)

    sql_update = "UPDATE accounts SET balance = balance - 100 WHERE name = %s"
    val_update = ("Bob",)
    mycursor.execute(sql_update, val_update)

    mydb.commit()  # 提交事务,所有操作都成功则生效
except:
    mydb.rollback()  # 如果出现异常,回滚事务,所有操作都不生效
    print("Transaction failed")
finally:
    mycursor.close()
    mydb.close()
  • 在SQLite中使用事务示例(以Python代码操作)
import sqlite3

conn = sqlite3.connect('example.db')
c = conn.cursor()

try:
    conn.execute("BEGIN")
    # 执行数据库操作,比如插入和更新等
    c.execute("INSERT INTO products (name, price) VALUES (?,?)", ("Widget", 9.99))
    c.execute("UPDATE products SET price = price * 1.1 WHERE name =?", ("Widget",))
    conn.commit()
except:
    conn.rollback()
    print("Transaction failed")
finally:
    c.close()
    conn.close()

学习资源推荐

  1. 官方文档
    • MySQL官方文档,详细介绍了MySQL的各种功能、语法以及与不同编程语言的结合使用方法等,对于深入学习MySQL很有帮助。
    • SQLite官方文档,能让我们全面了解SQLite的特性、操作规范等内容。
  2. 在线课程

下期预告

《Python后端学习系列(4):用户认证与授权机制(基于JWT等方式)》

  • 用户认证的基本概念与流程
  • JWT(JSON Web Token)的原理与使用
  • 基于角色的授权机制实现
  • 安全相关的注意事项

欢迎在评论区留下你的问题或学习心得,我们下期见!

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值