数据库配置,flask_sqlalchemy使用

project/app/config/secure.py 数据库URI连接配置

DB_HOST = '127.0.0.1'
DB_PORT = '3306'
DB_DATABASE = 'flask_demo'
DB_USERNAME = 'root'
DB_PASSWORD = 'root'

SQLALCHEMY_DATABASE_URI = f'mysql+mysqlconnector://{DB_USERNAME}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_DATABASE}'
SQLALCHEMY_TRACK_MODIFICATIONS = False
# SQLALCHEMY_ECHO = True
SECRET_KEY = '\x00\x8b\x15\x10R\xc5t &\x13\xad"\xff\xe2\xb0&\xbeK\xfb\x99\xfc\xba\x17}'
# import os
# os.urandom(24) #随机码

project/app/models/base.py 使用flask_sqlalchemy ORM操作数据库,创建db对象

from datetime import datetime
from sqlalchemy import Column, Integer, SmallInteger
from flask_sqlalchemy import SQLAlchemy as _SQLAlchemy, BaseQuery
from contextlib import contextmanager


# 增加自动提交事务
class SQLAlchemy(_SQLAlchemy):
    @contextmanager
    def auto_commit(self):
        try:
            yield
            self.session.commit()
        except Exception as e:
            db.session.rollback()
            raise e

# 重写filter_by函数
class Query(BaseQuery):
    def filter_by(self, **kwargs):
        if 'status' not in kwargs.keys():
            kwargs['status'] = 1
        return super().filter_by(**kwargs)

db = SQLAlchemy(query_class=Query)

class Base(db.Model):
    __abstract__ = True
    create_time = Column('create_time', Integer)
    status = Column(SmallInteger, default=1)

    def __init__(self):
        self.create_time = int(datetime.now().timestamp())

    def set_attrs(self, attrs_dict):
        for key, value in attrs_dict.items():
            if hasattr(self, key) and key != 'id':
                setattr(self, key, value)

    @property
    def create_datetime(self):
        if self.create_time:
            return datetime.fromtimestamp(self.create_time)
        else:
            return None

project/app/app.py 在app上下文中初始化数据库

from flask import Flask

# from app.api.v1 import register_blueprint
from app.models.base import db

def create_app():
    app = Flask(__name__)
    # app.config.from_object('app.config.setting')
    app.config.from_object('app.config.secure')
    db.init_app(app) #注册数据库
    with app.app_context():
        db.create_all()
    # register_blueprint(app)
    return app

project/app/models/user.py 创建一个user数据表

from werkzeug.security import generate_password_hash, check_password_hash
from app.models.base import Base, db


class User(Base):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(24), unique=True, nullable=False)
    nickname = db.Column(db.String(24), unique=True)
    auth = db.Column(db.SmallInteger, default=1)
    _password = db.Column('password', db.String(100))

    @property
    def password(self):
        return self._password

    @password.setter
    def password(self, raw_password):
        self._password = generate_password_hash(raw_password)

    def check_password(self, raw_password):
        return check_password_hash(self._password, raw_password)

    @staticmethod
    def register_by_email(nickname, account, secret):
        with db.auto_commit():
            user = User()
            user.nickname = nickname
            user.email = account
            user.password = secret
            db.session.add(user)

project/main.py 入口文件

from app.app import create_app

app = create_app()

if __name__ == '__main__':
    app.run(debug=True, port=5050)
### Flask SQLAlchemy 使用教程 在 Flask使用 SQLAlchemy 是一种高效的方式来管理和操作数据库。通过 `Flask-SQLAlchemy` 扩展,可以轻松实现 ORM(对象关系映射),从而简化复杂的 SQL 查询过程。 以下是关于如何使用 FlaskSQLAlchemy 创建并操作用户模型的具体方法: #### 1. 安装依赖库 为了使用 FlaskSQLAlchemy,需要安装以下 Python 包: ```bash pip install flask sqlalchemy flask_sqlalchemy ``` #### 2. 配置数据库连接 创建一个基本的 Flask 应用程序,并配置 SQLite 数据库作为数据存储介质。 ```python from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # 设置数据库 URI (这里以 SQLite 为例) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' db = SQLAlchemy(app) ``` 上述代码片段设置了数据库路径以及初始化了 SQLAlchemy 实例[^1]。 #### 3. 定义用户模型 定义一个名为 `User` 的模型类,该类继承自 `db.Model` 并表示数据库中的表结构。 ```python class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(20), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) password = db.Column(db.String(60), nullable=False) def __repr__(self): return f"User('{self.username}', '{self.email}')" ``` 此代码段展示了如何定义字段属性及其约束条件,例如主键 (`id`)、唯一性 (`unique`) 和非空值 (`nullable=False`) 等特性。 #### 4. 初始化数据库 运行脚本前需先创建对应的表格结构: ```python with app.app_context(): db.create_all() ``` 这一步会基于之前定义好的模型生成实际的数据库文件和表结构。 #### 5. 插入新记录到数据库数据库中添加一条新的用户信息可以通过实例化 `User` 对象完成。 ```python new_user = User(username='test', email='test@example.com', password='password') with app.app_context(): db.session.add(new_user) db.session.commit() ``` 这段代码演示了如何将新建的对象保存至持久化的数据库当中。 #### 6. 表单集成与前端显示 如果希望结合 HTML 页面提交表单,则可引入额外工具包如 Flask-WTF 来处理验证逻辑;同时借助 Bootstrap 提升界面美观度[^2]。 --- ### 总结 以上内容涵盖了从环境搭建到具体功能实现的过程,帮助开发者快速掌握 Flask 结合 SQLAlchemy 开发 Web 应用的核心技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

冰糖葫芦五加皮耶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值