|
|
from flask import Flask" K" b# E7 \" D; u, X! e
app = Flask(__name__) C. _* a6 g' T1 I' n
+ @6 V7 [* `8 r
class Config(object):3 }- g: V* O2 ^) _1 K5 [
DEBUG = True
5 g& l6 R8 L5 `9 { a: |# U # 数据库连接配置
# c; }2 E1 b5 ^7 z5 X# L! T# ` # SQLALCHEMY_DATABASE_URI = "数据库类型://数据库账号:密码@数据库地址:端口/数据库名称?charset=utf8mb4"
, K. ~# a* q6 V SQLALCHEMY_DATABASE_URI = "mysql://root:123@127.0.0.1:3306/students?charset=utf8mb4"
- A) c' d6 F) ]% Q& C8 T8 a3 ` # 动态追踪修改设置,如未设置只会提示警告! n. e5 d7 F) O. F8 m$ K
SQLALCHEMY_TRACK_MODIFICATIONS = True
+ Q( u" V+ a* ]; W# a1 K8 n # 查询时会显示原始SQL语句+ {; [$ a4 p- K! H
SQLALCHEMY_ECHO = True
! z* e" F- X/ J- n ?4 o: s3 I& B8 ]5 w. i9 R
app.config.from_object(Config)- \- N) f' E0 c8 t
6 C7 J3 f5 L" U k( i
% ~ k" H+ X: H6 o- }% V- j! ^6 p"""模型类定义"""% h( p# i$ }4 p, w2 ^3 C
from flask_sqlalchemy import SQLAlchemy5 |% _# n1 s) a5 t& F! y, ~ l
db = SQLAlchemy(app=app)
3 q- y! r! W2 A* j% f! c: m, g: n# 等同于" S5 _* N, I; ]+ E# Z8 d- I
# db = SQLAlchemy()/ |; {# E% q& T$ I7 B8 \
# db.init_app(app)8 W8 g G0 t! `3 o) p8 u
$ a9 q& m# ?9 }class Student(db.Model):$ n' b" R; f( m6 u4 X
"""学生信息模型"""
- C6 x$ ]1 I3 a' _+ V, } # 声明与当前模型绑定的数据表名称2 ~$ @& b( |) s
__tablename__ = "db_students"' s( g9 m. j! v8 A8 i
# 字段定义
5 ]: E: x- F6 F# t """. l# d' X ]/ ]. w3 b' w
create table db_student(! i+ _9 W U/ `
id int primary key auto_increment comment="主键",! z, d- T: s# W: ?" Z) H
name varchar(15) comment="姓名",& F! ^2 ]0 w, \( e
)
& H o& F8 W/ h7 |2 K) }6 t """8 a) k; r8 L- e+ X
id = db.Column(db.Integer, primary_key=True,comment="主键"); u8 L# |4 ]3 R
name = db.Column(db.String(15), comment="姓名") m' U' d6 a/ T' Y
age = db.Column(db.SmallInteger, comment="年龄")2 r+ p. F7 J" f5 N
sex = db.Column(db.Boolean, default=True, comment="性别"), q6 `; v8 q, e) h: u5 d1 |
email = db.Column(db.String(128), unique=True, comment="邮箱地址")0 n* X1 b; Y _) z; D# k
money = db.Column(db.Numeric(10,2), default=0.0, comment="钱包")! X8 v4 V6 I7 k% `. m
7 D# O3 s( Y& Q7 O0 H) A
def __repr__(self): \! e c8 \ ]/ A* m
return f"{self.name}<Student>"+ O; N$ |* ~, W' \/ B
! A' I% d/ J8 C3 R7 V
# 所有的模型必须直接或间接继承于db.Model9 u: I+ ]( _8 K2 J* B$ I# o
class Course(db.Model):" Y( J4 D% ~9 A5 }
"""课程数据模型"""
7 G$ U! _" d. t7 c, e4 A __tablename__ = "db_course"
6 v* I+ ~3 F) _7 C6 W1 @- I2 l id = db.Column(db.Integer, primary_key=True, comment="主键")! y" b e! M: }
name = db.Column(db.String(64), unique=True, comment="课程")" ^' ]" c/ [( U0 J$ J
price = db.Column(db.Numeric(7, 2)). E1 Q% w* o1 @6 o1 P M0 R M
# repr()方法类似于django的__str__,用于打印模型对象时显示的字符串信息
- R6 f* n0 K5 R* o0 h2 h2 g' C: q def __repr__(self):
' m5 l1 c7 a# F' T0 z8 C6 U return f'{self.name}<Course>'! s2 B- r# b/ w M: ~
5 [. Y7 ]: x: S+ S& Y) \! h6 Hclass Teacher(db.Model):2 s! v$ w% }0 J; _$ d1 L
"""老师数据模型"""
3 d( l2 X; W0 S7 H0 W( a8 z __tablename__ = "db_teacher"( r n U' k& F1 W h% @
id = db.Column(db.Integer, primary_key=True, comment="主键")
$ u5 b& o- w: V. S% C) ^ name = db.Column(db.String(64), unique=True, comment="姓名")8 Z0 n/ {9 \, V+ Z( C
option = db.Column(db.Enum("讲师", "助教", "班主任"), default="讲师")
v# U( ]$ K& ^4 ]
$ U _; z' `; w5 O def __repr__(self):
9 l. h% h& E3 }- D return f"{self.name}< Teacher >"3 J/ F F& L( x$ M
; S9 M7 S! N% T4 x5 S
@app.route("/")1 }# N& m: a9 d& L# J( g% U! ]
def index():
" i/ I8 |3 E* b3 y [1 L- Q7 @- { return "ok!"
: U8 f4 P1 d5 T& }. m/ R Y+ _. w; t
if __name__ == '__main__':
7 a% \+ J; S5 W2 F$ @ with app.app_context():
+ h8 D- E$ y. _& P' `) S # 检测数据库中是否存在和模型匹配的数据表。
4 G* T$ e! i4 G8 \) M # 如果没有,则根据模型转换的建表语句进行建表。/ d2 I/ r0 R* z8 Y" ?' h- Q0 c0 f
# 如果找到,则不会进行额外处理, N9 P( L$ N. g. s7 r0 \; {
db.create_all()
: {4 \" @* `. L app.run(debug=True)7 @" \3 w* R& @* P
8 s, ?1 k# F/ d7 d
) e) u% D) h0 g( p5 u, F& \: {* n5 m |
|