|
|
from flask import Flask7 T. ?1 Q G2 w; [
app = Flask(__name__)
4 L( V$ L# o7 k) e7 }% @* Q2 K- Z
1 |- M% Z# X; b4 d- V9 \' _' Sclass Config(object):
3 {6 Y8 H8 E' w DEBUG = True6 @& s. A# P; L
# 数据库连接配置. U) {8 N: ^2 x
# SQLALCHEMY_DATABASE_URI = "数据库类型://数据库账号:密码@数据库地址:端口/数据库名称?charset=utf8mb4", b) f) ]) D" x7 [7 I
SQLALCHEMY_DATABASE_URI = "mysql://root:123@127.0.0.1:3306/students?charset=utf8mb4"* z' v1 r. w; g* V% m
# 动态追踪修改设置,如未设置只会提示警告4 T) p1 _9 Y6 n1 m
SQLALCHEMY_TRACK_MODIFICATIONS = True
( f" Y/ R, Q; ]* z- E # 查询时会显示原始SQL语句' |4 { g: M$ S& k
SQLALCHEMY_ECHO = True# D; x$ i/ S& a( ?! u& o1 t, P
2 z2 r( x7 j2 m: m
app.config.from_object(Config)
/ X- {! S9 s. o2 k% j4 A0 }; N" U2 j5 f) Z- ^
4 O& h, ?" P9 s0 V' }. m
"""模型类定义"""
7 G, b/ d: k, \4 I2 s8 Vfrom flask_sqlalchemy import SQLAlchemy
9 I) u. \" H/ c* }' `* R4 L' pdb = SQLAlchemy(app=app)
+ [, H0 k$ A& b2 x# 等同于$ T# v% m' m/ ]
# db = SQLAlchemy()$ T* {8 h- @: _6 s
# db.init_app(app)7 E! F( i& k) Q8 v' a- X$ ]& l# q
9 e% U6 w- s! Q1 y$ y1 Q
class Student(db.Model):
) l7 d+ g6 q# _0 W# F8 J" H: J """学生信息模型"""+ m% a6 k8 }9 f( t& p; n7 J
# 声明与当前模型绑定的数据表名称' Z; }! {+ Q' P! v7 L" H
__tablename__ = "db_students"
0 k7 X* _% f- @; |( D: o7 M # 字段定义
/ f6 Z# g# H2 y7 P """) g* [( M2 k4 X; a: K3 Y4 ]
create table db_student(
% ~8 P' }3 t. J- z& P/ ] id int primary key auto_increment comment="主键",
" `# s0 Y7 E9 C8 j; ^; o name varchar(15) comment="姓名",6 ~/ A0 r1 P: X* L8 W
)8 T* [) k# ^* y. q8 V
"""
4 \9 o+ y# u& K6 p; o% f id = db.Column(db.Integer, primary_key=True,comment="主键")6 Y2 f2 s6 W/ @# ?5 W
name = db.Column(db.String(15), comment="姓名")
, F# R5 `8 i3 F% C. i* o- ] age = db.Column(db.SmallInteger, comment="年龄")* K: m! n; p2 s: y
sex = db.Column(db.Boolean, default=True, comment="性别")- |4 ?" Z' j9 k) P$ v! Y5 C9 A
email = db.Column(db.String(128), unique=True, comment="邮箱地址"); {* {! ~" K; d; r( R0 P
money = db.Column(db.Numeric(10,2), default=0.0, comment="钱包")5 q; d0 E% U% V( t
: r4 t" i0 y, E; V. ]/ n" E
def __repr__(self):
& M) x2 C% e C- J" T* P return f"{self.name}<Student>"+ `8 ?3 P) P9 W( D
& ]* E# Q9 H' v6 Y% E& i6 J2 R0 g# 所有的模型必须直接或间接继承于db.Model- H& ~, \ R c' a A4 s
class Course(db.Model): Z+ y' \1 v' g$ g/ q+ i
"""课程数据模型"""
5 F( X: |6 q# P8 j( @. `. C __tablename__ = "db_course"0 L; r1 F; \1 x
id = db.Column(db.Integer, primary_key=True, comment="主键")1 E/ P4 u2 y( t3 a z; n3 V
name = db.Column(db.String(64), unique=True, comment="课程")! R* C- R+ J7 p }/ `
price = db.Column(db.Numeric(7, 2))
( f9 R# Y/ o1 P2 X5 o # repr()方法类似于django的__str__,用于打印模型对象时显示的字符串信息
# P) A& c! m8 P$ ] def __repr__(self):9 S" Q, v4 Y' v4 d" J/ d# p5 U: M+ I1 m
return f'{self.name}<Course>'% m; U4 T' h, n# z* E) I
8 b2 J+ i3 N& o
class Teacher(db.Model):
) N4 f8 H* q1 D5 U( G """老师数据模型"""2 z! S: |4 f/ m% H
__tablename__ = "db_teacher"$ R- b6 H" w( d+ z
id = db.Column(db.Integer, primary_key=True, comment="主键")5 z/ q! _5 @ J* d/ c- X3 ^! u$ C
name = db.Column(db.String(64), unique=True, comment="姓名")
) m/ ~ r5 R$ }$ W5 u option = db.Column(db.Enum("讲师", "助教", "班主任"), default="讲师")
# R1 Y% ^9 b) I1 I. K3 {( [" p
+ E9 A6 f7 H# w' A def __repr__(self):
[0 U+ H% O! h; x& u. O5 r return f"{self.name}< Teacher >"$ A* g5 E2 a* o( i
# E. {( f8 Z5 G1 I+ l+ W4 o) x
@app.route("/")% f9 P' E1 e% k) J" y
def index():
( o9 r4 ]5 t/ j- M+ S, G return "ok!"! [" O; d/ U4 c3 W1 a$ h$ l
. w1 g1 S% r5 _& {, |/ V7 o
if __name__ == '__main__':8 C+ y& i F! r9 Q4 z) Y( S
with app.app_context():; Z- g& K- a3 M: A% N
# 检测数据库中是否存在和模型匹配的数据表。) _( s& g7 d% @. N$ J
# 如果没有,则根据模型转换的建表语句进行建表。% z7 t- i( t8 S1 M7 g/ A
# 如果找到,则不会进行额外处理; p* g- ?- G/ w* N& R
db.create_all()1 ^. q! C) T% j! g
app.run(debug=True)6 n6 w5 k( |9 y+ _' I8 {5 R- V0 h
, f7 V; C) I; {) I. B0 _$ I* n
3 g7 r8 s7 \* ]' H( V1 P# O) a) `" ?3 { |
|