flask mysql sqlalchemy教程+

flask mysql sqlalchemy教程

1.建立models_base文件

连接数据库

复制代码

import logging
import ast
import simplejson as json
import time
from flask_sqlalchemy import SQLAlchemy
from flask import Flask

from commons.entity import rds_mongo

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:1234@localhost:3306/flask_demo'

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)

logger = logging.getLogger("platform")

复制代码

2.建立数据库

### 使用 FlaskMySQL 构建购物网站 #### 创建项目结构 为了构建一个基于 FlaskMySQL 的购物网站,首先需要规划项目的文件夹和文件布局。通常情况下,建议按照如下方式组织: ``` shopping_website/ │── static/ # 存放静态资源 (CSS, JavaScript, 图片等) │── templates/ # HTML模板文件存放位置 │── __init__.py # 初始化应用程序实例的地方 │── config.py # 配置参数设置 │── models.py # 数据库模型定义 │── routes.py # 路由处理逻辑 └── run.py # 启动服务器入口脚本 ``` #### 安装依赖项 确保安装必要的 Python 包来支持 Web 开发工作流以及与 MySQL 进行交互。 ```bash pip install flask pymysql sqlalchemy ``` 上述命令会下载并安装 Flask 框架、PyMySQL 适配器以及 SQLAlchemy ORM 工具[^1]。 #### 设置数据库连接 编辑 `config.py` 文件以指定 MySQL 数据库的相关信息,例如主机名、用户名、密码及数据库名称。 ```python import os basedir = os.path.abspath(os.path.dirname(__file__)) class Config(object): SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:password@localhost/shopping_db' SQLALCHEMY_TRACK_MODIFICATIONS = False ``` 此部分代码设置了 SQLAlchemy 所需的 URI 字符串以便于后续操作数据库表单[^5]。 #### 设计数据模型 在 `models.py` 中定义商品、订单等相关实体类,并通过继承自 Base 类的方式映射到实际存在的关系型表格里去。 ```python from datetime import datetime from .extensions import db class Product(db.Model): id = db.Column(db.Integer(), primary_key=True) name = db.Column(db.String(80), nullable=False) price = db.Column(db.Float(), default=0) class Order(db.Model): id = db.Column(db.Integer(), primary_key=True) created_at = db.Column(db.DateTime(), default=datetime.utcnow) items = db.relationship('OrderItem', back_populates='order') class OrderItem(db.Model): order_id = db.Column(db.ForeignKey('order.id'), primary_key=True) product_id = db.Column(db.ForeignKey('product.id'), primary_key=True) quantity = db.Column(db.Integer()) order = db.relationship('Order', back_populates='items') product = db.relationship('Product') ``` 这段示例展示了三个核心对象之间的关联关系——产品(Product),订单(Order)及其明细条目(OrderItem)[^4]。 #### 编写业务逻辑 最后,在 `routes.py` 内实现具体的视图函数用来响应 HTTP 请求;比如展示首页列表、提交购买请求等功能点。 ```python @app.route('/') def index(): products = Product.query.all() return render_template('index.html', products=products) @app.route('/checkout', methods=['POST']) @login_required def checkout(): cart_items = session.get('cart') or [] new_order = Order() for item in cart_items: prod = Product.query.filter_by(id=item['id']).first_or_404() order_item = OrderItem( product=prod, quantity=int(item['quantity']), order=new_order ) db.session.add(order_item) try: db.session.commit() flash("Your purchase was successful!") del session['cart'] except Exception as e: db.session.rollback() raise return redirect(url_for('.thankyou')) ``` 以上片段实现了两个基本功能:一是获取全部商品供前端页面渲染;二是接收来自用户的结账动作并将之保存至持久化存储介质中[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值