找回密码
 注册
查看: 13|回复: 0

flask 操作数据库相关代码

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2024-7-12 00:18:17 | 显示全部楼层 |阅读模式
from flask import Flask
/ X( b! @) _0 X, }$ `$ uapp = Flask(__name__)* P5 G' `% y! k, j

6 q- @# S% t- r. j6 u/ Q1 y7 cclass Config(object):
$ o$ R/ [% z# f+ w7 ~1 b    DEBUG = True% W3 F1 l" }2 H  C
    # 数据库连接配置/ f, Y2 E# M1 v+ j- e
    # SQLALCHEMY_DATABASE_URI = "数据库类型://数据库账号:密码@数据库地址:端口/数据库名称?charset=utf8mb4"
3 h2 ?, e( ]8 e* Q7 ^% f8 V. |    SQLALCHEMY_DATABASE_URI = "mysql://root:123@127.0.0.1:3306/students?charset=utf8mb4"
: Z6 ^, u. |' q3 i$ ^    # 动态追踪修改设置,如未设置只会提示警告. g% s, q- M) A$ t! i: R
    SQLALCHEMY_TRACK_MODIFICATIONS = True# }2 J3 I9 L$ ]# s
    # 查询时会显示原始SQL语句
/ `- W$ ~' w( [% v- I    SQLALCHEMY_ECHO = True& _- }5 V$ s  l- ]

3 Z1 [0 S6 D/ j$ ~% ~. l  B8 [# Fapp.config.from_object(Config)
% L0 ]  R8 B3 S3 s- G( K% u# n  y/ f  d1 I, c3 j

& u. Q; a/ w% T2 O3 [6 ]2 k9 y"""模型类定义"""2 O4 K( A0 |* c
from flask_sqlalchemy import SQLAlchemy
0 q9 U# D) E% @) R0 Pdb = SQLAlchemy(app=app)" x4 [# V& Z) c+ O4 A1 p
# 等同于/ X; v3 ?; Y% y& h7 Z
# db = SQLAlchemy()* i: T! X8 j( s: g4 J8 M8 \
# db.init_app(app)
  U- I6 e+ G' o- q- w/ j6 C# r- Q( F$ n! n
class Student(db.Model):" ?6 Y! `' A' h- {
    """学生信息模型"""
! \9 I9 L5 z% k& e* W    # 声明与当前模型绑定的数据表名称6 `+ @1 D6 i1 N8 ?9 o" Q
    __tablename__ = "db_students"' Y5 l9 P9 D1 \$ F/ }
    # 字段定义+ {& m% _5 |# e7 i- D+ ~
    """- d" ~7 d1 _- h0 k" ~6 E4 k. [+ F
    create table db_student(6 l6 R3 w5 w+ K2 t& @# }
      id int primary key auto_increment comment="主键",
1 Y/ D% }  D  ]* ?" O- Q      name varchar(15) comment="姓名",
9 E7 @4 P! n! }7 m- w! F% }7 E    )
1 J$ Z% R( Z& k7 a5 R" c0 M# o    """
# j- D6 _8 Z+ r! Q$ ^; u9 _) o% E7 P    id = db.Column(db.Integer, primary_key=True,comment="主键")
3 ]+ Q- O5 n. V    name = db.Column(db.String(15), comment="姓名")
" ?$ y$ ^( J; X: k    age = db.Column(db.SmallInteger, comment="年龄")) |! w: W" b; T/ N3 L* s& y" ]2 f- q
    sex = db.Column(db.Boolean, default=True, comment="性别")8 t* \( l. _9 J) @) i
    email = db.Column(db.String(128), unique=True, comment="邮箱地址"); u' o: c! d0 d& A
    money = db.Column(db.Numeric(10,2), default=0.0, comment="钱包")
& b+ j6 l( K; r
+ M8 S  I, q. r    def __repr__(self):
, Q# W$ v3 v& V2 m        return f"{self.name}<Student>"
! O6 e: V6 O/ B' n6 c  j, {2 l0 A% [6 I+ X: A% G% N0 e
# 所有的模型必须直接或间接继承于db.Model  ]$ `% v3 n1 ^4 R
class Course(db.Model):
) m  [& m0 p3 d9 \# h7 V. ?! T    """课程数据模型"""0 g7 r$ j2 Q5 G, C
    __tablename__ = "db_course"5 B6 a2 y8 O) w8 E& j
    id = db.Column(db.Integer, primary_key=True, comment="主键")
% `$ Q& q, \, U2 g* {! G- x    name = db.Column(db.String(64), unique=True, comment="课程")
) w7 k* ^# L2 `+ D    price = db.Column(db.Numeric(7, 2))/ \: G3 Y4 A8 I$ I
    # repr()方法类似于django的__str__,用于打印模型对象时显示的字符串信息& R3 M" r( f  O8 [% L
    def __repr__(self):
$ C, J+ l  {; x( j        return f'{self.name}<Course>'
7 s: W% H8 [# N) m& t9 _8 w+ f- k! M( n" e0 r3 a" A2 J! O
class Teacher(db.Model):
4 q' W* e9 r  v8 }& t; ?    """老师数据模型"""
& B8 {( D) S4 [# `9 z    __tablename__ = "db_teacher"
" a4 \5 I) X: Y) F, `! U2 Q0 o! C    id = db.Column(db.Integer, primary_key=True, comment="主键"), _9 W6 d4 ~& k$ Z8 s
    name = db.Column(db.String(64), unique=True, comment="姓名")1 q7 v0 _' k* V+ L. @8 g' }1 o
    option = db.Column(db.Enum("讲师", "助教", "班主任"), default="讲师")& v3 y- R; t. g: ~4 t

2 A5 ?( v. m  c" }& k    def __repr__(self):- \+ g( [# J5 [9 A5 R& X
        return f"{self.name}< Teacher >"
* ?3 s5 Y! @$ Y0 l
3 E' ~/ R( _" N; f@app.route("/")2 L$ h" h: x8 ]" t( Q7 S
def index():
" U9 i8 |9 R, L    return "ok!"  C" j! s1 o" m) C1 `7 s

. _- q7 q" V) y3 g/ Dif __name__ == '__main__':
- Z" @. Z7 U% m# J" O    with app.app_context():6 {! W/ w4 q* l9 _6 k- x0 p
        # 检测数据库中是否存在和模型匹配的数据表。& Q- H1 `2 U5 d. W6 c
        # 如果没有,则根据模型转换的建表语句进行建表。' K1 ^" `  S$ W# s$ y
        # 如果找到,则不会进行额外处理
5 g* z8 h" K( v9 l        db.create_all()
# `$ O6 h% A# Y7 K; ?    app.run(debug=True)
! T0 U' ~. l3 V0 [; g$ o1 z
- y4 [4 r, ?0 D0 a
+ ~: [/ ]7 E# @$ p/ i. ^; K
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 00:32 , Processed in 0.012813 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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