- 积分
- 16843
在线时间 小时
最后登录1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
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 |
|