Flask(flask-sqlalchemy)连接数据库

文章介绍了如何在Python的Flask框架中利用SQLAlchemy进行ORM(Object-RelationalMapping)操作,包括设置数据库连接、创建数据模型、执行增删改查操作以及使用外键关联表。同时提到了flask-migrate用于数据库迁移的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。
SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”。SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合;而对象集合的抽象又重要于表和行。
SQLAlchemy是flask的一款数据库连接插件
使用以下命令安装包文件

pip install pymysql
pip install flask-sqlalchemy
  1. 首先配置app的属性,利用app.config[‘SQLALCHEMY_DATABASE_URI’]配置好flaskapp,之后调用db=SQLAlachemy(app)连接数据库。
  2. 用户自定义类继承db.model就是一张表,使用db.Column来定义一个属性,可以使用db.create_all()来将类生成表放入数据库。
  3. db.session实现数据库会话,可以进行增,删,改操作,执行db.commit后提交修改。
  4. flask-sqlalchemy提供外键等定义,可以用类的思路实现连表等操作。(但是熟悉SQL的话还是写SQL顺畅,如果要写原生sql需要用engine连接,连接返回的对象有execute方法可以执行原生SQL)
  5. 连接有问题可以尝试用.formate或者直接改字符串,有时候用f"{}"会出错不知道为什么
  6. 推荐使用flask-migrate来管理数据库,键入指令flask db migrate/flask db upgrade对ORM定义的数据库修改进行更新。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# MySQL所在的主机名
HOSTNAME = ""
# MySQL监听的端口号,默认3306
PORT = 
# 连接MySQL的用户名,读者用自己设置的
USERNAME = ""
# 连接MySQL的密码,读者用自己的
PASSWORD = ""
# MySQL上创建的数据库名称
DATABASE = ""

app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"

# 在app.config中设置好连接数据库的信息,
# 然后使用SQLAlchemy(app)创建一个db对象
# SQLAlchemy会自动读取app.config中连接数据库的信息

db = SQLAlchemy(app)

# ORM ---- 一个类对应一张表
class User(db.Model):
    __tablename__ = "user"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    # varchar, null=0
    username = db.Column(db.String(100), nullable=False)
    password = db.Column(db.String(100), nullable=False)
    email = db.Column(db.String(100))
    signature = db.Column(db.String(100))

class Article(db.Model):
    __tablename__ = "article"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(200), nullable=False)
    content = db.Column(db.Text, nullable=False)

    # 添加作者的外键
    author_id = db.Column(db.Integer, db.ForeignKey("user.id"))
    # backref:会自动的给User模型添加一个articles的属性,用来获取文章列表
    author = db.relationship("User", backref="articles")

# 这里用db.create_all(),以后可以使用flask-migrate自动生成迁移脚本
with app.app_context():
   db.create_all()

@app.route('/')
def hello_world():
    return 'Hello World!'

@app.route("/user/add")
def add_user():
    # 1. 创建ORM对象
    user = User(username="张三", password='1111')
    # 2. 将ORM对象添加到db.session中
    db.session.add(user)
    # 3. 将db.session中的改变同步到数据库中
    db.session.commit()
    return "用户创建成功!"

@app.route("/user/query")
def query_user():
    # 1. get查找:根据主键查找
    # user = User.query.get(1)
    # print(f"{user.id}: {user.username}-{user.password}")
    # 2. filter_by查找
    # Query:类数组
    users = User.query.filter_by(username="张三")
    for user in users:
        print(user.username)
    return "数据查找成功!"

@app.route("/user/update")
def update_user():
    user = User.query.filter_by(username="张三").first()
    user.password = "222222"
    db.session.commit()
    return "数据修改成功!"

@app.route('/user/delete')
def delete_user():
    # 1. 查找
    user = User.query.get(1)
    # 2. 从db.session中删除
    db.session.delete(user)
    # 3. 将db.session中的修改,同步到数据库中
    db.session.commit()
    return "数据删除成功!"

@app.route("/article/add")
def article_add():
    article1 = Article(title="Flask学习大纲", content="Flaskxxxx")
    article1.author = User.query.get(2)
    # 添加到session中
    db.session.add(article1)
    # 同步session中的数据到数据库中
    db.session.commit()
    return "文章添加成功!"

@app.route("/article/query")
def query_article():
    user = User.query.get(2)
    for article in user.articles:
        print(article.title)
    return "文章查找成功!"

if __name__ == '__main__':
    app.run()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

volcanical

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值