易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 6|回复: 0
收起左侧

flask 操作数据库相关代码

[复制链接]
发表于 2024-7-12 00:18:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
from flask import Flask; O! n; C& y1 {8 D3 g
app = Flask(__name__)$ H2 e+ O  w7 q% J5 h6 o! ?
  [: J8 A3 h. U' r8 ^5 ^. f' }3 ~
class Config(object):
. G# B+ I% |2 R! Z/ _6 w! E    DEBUG = True
9 B, D, q- D, x3 {! n" `/ j    # 数据库连接配置
0 V" V  G5 P$ H9 a/ R% u$ M    # SQLALCHEMY_DATABASE_URI = "数据库类型://数据库账号:密码@数据库地址:端口/数据库名称?charset=utf8mb4"" Y2 G9 L8 _% w0 u( N4 R4 }4 s9 S* k- a
    SQLALCHEMY_DATABASE_URI = "mysql://root:123@127.0.0.1:3306/students?charset=utf8mb4"* R$ [; d6 T1 n
    # 动态追踪修改设置,如未设置只会提示警告0 x) W7 a8 s" r0 B
    SQLALCHEMY_TRACK_MODIFICATIONS = True% C6 k7 G0 j4 M; e" y2 T2 }$ S$ Q
    # 查询时会显示原始SQL语句
4 m7 f0 M1 s4 t) M5 F    SQLALCHEMY_ECHO = True: i  w% {% y4 _3 U. P

. b0 z3 t. n  k1 G/ u8 Vapp.config.from_object(Config)1 b: L0 ~7 c# M2 L
  c1 \+ I' C4 l# x9 j9 b' V. E$ `; W+ x  F

4 [  W' K! R- L0 c"""模型类定义"""
9 V2 D+ k5 m4 Tfrom flask_sqlalchemy import SQLAlchemy/ j( M9 q4 v0 q6 _+ H2 ]
db = SQLAlchemy(app=app)
( R6 \1 O. ]  V+ _, L& L  ]( n# 等同于* s% X* j8 J, z6 E; g& j0 C5 f
# db = SQLAlchemy()' X2 L0 `5 G& F; r* {" F
# db.init_app(app)6 {& ]( J1 P* Z

' M# }7 r, G+ I2 G6 o% X5 mclass Student(db.Model):
) p: Q3 e- }1 a6 Z    """学生信息模型"""/ v7 h% m+ p7 v0 z% f
    # 声明与当前模型绑定的数据表名称6 g0 X) C  t& Y2 n+ c
    __tablename__ = "db_students"
; ^) ]  k" g- U0 h( |    # 字段定义9 o6 M. F# U2 ~4 ]: {  v
    """7 F! e% N; X* q1 |9 _3 i& f# s
    create table db_student(
0 Q/ Q5 i. R/ S/ b/ m      id int primary key auto_increment comment="主键",. ^$ C. P- c0 J  t
      name varchar(15) comment="姓名",6 X- P1 |8 S+ f3 |; l7 f
    )- q, F; H8 L- P( b+ Z
    """
* J; Z  B9 ~$ R" R6 H. A0 R6 L0 @    id = db.Column(db.Integer, primary_key=True,comment="主键")
5 v' I) I4 L- Q' Q$ u6 |    name = db.Column(db.String(15), comment="姓名")$ _, j: E0 `3 g/ `5 l5 s  w- b
    age = db.Column(db.SmallInteger, comment="年龄")! U& ]1 X+ m# S# `* X. w' y+ t5 ?
    sex = db.Column(db.Boolean, default=True, comment="性别")
4 D6 q" k& ~- |    email = db.Column(db.String(128), unique=True, comment="邮箱地址")- d4 ^7 P' z6 x) w/ A4 q3 P
    money = db.Column(db.Numeric(10,2), default=0.0, comment="钱包")7 A# g: q/ j7 B) {' L
3 R7 V7 @1 F8 h/ t8 S+ Y0 F2 y% W
    def __repr__(self):$ z6 e5 D5 Y# R; p3 J# m) U/ l2 `4 q
        return f"{self.name}<Student>"
% l- k! e/ x3 n7 K9 a0 @! ^
6 {! ~# Z) {1 x# 所有的模型必须直接或间接继承于db.Model
% E% J; B( n; R. D- x4 ]class Course(db.Model):% E+ x. X# o, ~
    """课程数据模型"""( W( W3 q; B3 o* y2 F
    __tablename__ = "db_course"+ E& H7 {/ L3 Q
    id = db.Column(db.Integer, primary_key=True, comment="主键")
9 v7 F; q3 d- G; q4 S    name = db.Column(db.String(64), unique=True, comment="课程")& t4 c# ~0 A+ K# B" `# H! I) d
    price = db.Column(db.Numeric(7, 2))$ r( \- ?: L8 Z) W7 g  [  z8 s1 l
    # repr()方法类似于django的__str__,用于打印模型对象时显示的字符串信息; U4 x, y8 c  }+ Y: ~
    def __repr__(self):9 a" X8 S: }  E/ c) {
        return f'{self.name}<Course>'. I4 M/ z+ d7 W# h. o
* ]3 b  X3 {% L
class Teacher(db.Model):' b( b2 w. T$ {2 w: Z0 a4 [9 J- r
    """老师数据模型"""! ~1 {$ R0 i; N
    __tablename__ = "db_teacher"9 |+ h8 x, O5 r1 `
    id = db.Column(db.Integer, primary_key=True, comment="主键")* ^0 ^3 W1 Q+ k% \! ?: Q
    name = db.Column(db.String(64), unique=True, comment="姓名")
5 }9 V5 u/ j# T8 n/ o5 g0 D7 a    option = db.Column(db.Enum("讲师", "助教", "班主任"), default="讲师")& `0 K6 v2 T0 W2 A/ T- r# R' h1 m
; Q, u% G# H, h
    def __repr__(self):
$ |; l" |* |- h5 s" o) ]: w  s        return f"{self.name}< Teacher >"( O8 [1 x" c) k

( k) E' |/ [) t# Y@app.route("/")8 X5 ?; @8 A5 ~
def index():  e3 v/ n* c* t
    return "ok!"
5 I0 _4 c  J* U- h* r+ d1 p& p/ Y2 C2 L$ v( K+ @# u
if __name__ == '__main__':
5 e1 d- F* N& R! j' i/ n/ R    with app.app_context():
6 B; U9 x- i9 ^3 S8 I        # 检测数据库中是否存在和模型匹配的数据表。( ^) J+ M' v4 l! o* K, G- ]
        # 如果没有,则根据模型转换的建表语句进行建表。
! ]) v8 m" T+ Q        # 如果找到,则不会进行额外处理
; d  g5 z) e/ x        db.create_all()/ h9 _, @7 M* ^% W
    app.run(debug=True)
5 [* \5 j0 |5 _( ]# l' |! `  c1 T% R7 Y' x9 E

9 ?+ B5 E: w- l, p1 g' k8 {% s
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-8 21:25 , Processed in 0.044513 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

快速回复 返回顶部 返回列表