|
|
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 |
|