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

flask 操作数据库相关代码

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2024-7-12 00:18:17 | 显示全部楼层 |阅读模式
from flask import Flask4 J4 Q' V  Q7 K+ h0 r- M% J
app = Flask(__name__)
: Q+ A6 ^- u+ C1 j  J) F) o7 t5 Q3 H. U: q. G* P
class Config(object):' \8 W1 G1 [8 M+ k
    DEBUG = True# {" w' `# A, Z3 p' X: l
    # 数据库连接配置4 W9 f3 r9 o) [  b0 U! N' p
    # SQLALCHEMY_DATABASE_URI = "数据库类型://数据库账号:密码@数据库地址:端口/数据库名称?charset=utf8mb4"
) ^# e- }% T8 M" H$ r, s( b    SQLALCHEMY_DATABASE_URI = "mysql://root:123@127.0.0.1:3306/students?charset=utf8mb4"# {% P4 Z: w/ Y& M* H$ g/ P
    # 动态追踪修改设置,如未设置只会提示警告
1 F/ I9 W. \+ h! R+ I    SQLALCHEMY_TRACK_MODIFICATIONS = True
2 t& ?; o; e! `5 C: l1 ^6 s    # 查询时会显示原始SQL语句
& H, p, G4 N# X% |" V+ g    SQLALCHEMY_ECHO = True
1 j% r5 d' |$ u( V' R- q2 K$ k
# W3 f( m: h8 _7 @  p  t* \app.config.from_object(Config)
) L1 X* N! t; ?  t. t- s6 P/ l* W% l: Z" K4 Y) s" z/ u

1 a1 C6 ~8 R) e4 k! V. Y5 D% t"""模型类定义"""" V$ \* q' W. P+ c
from flask_sqlalchemy import SQLAlchemy
& R$ m! Y1 p1 v9 K6 Ddb = SQLAlchemy(app=app)
, J" K$ o! P4 F8 ~# 等同于" U. M/ Q" w6 a0 G, d3 A) O6 k. X
# db = SQLAlchemy(); y$ E7 Y' P3 d5 H, i  p4 @
# db.init_app(app)
/ Y. A+ V" l& q( Y
* f1 q1 \+ Q9 G" L6 pclass Student(db.Model):
( {6 u; e; X+ h; |    """学生信息模型"""+ I- G: y6 p/ P- w+ e7 M
    # 声明与当前模型绑定的数据表名称0 z: ?. ~1 ~+ m; z, C9 o( a" h* W7 @5 U
    __tablename__ = "db_students"% I. S% L4 ^6 b! F, s
    # 字段定义
2 n( g+ _8 C& U, [+ ?, Q    """
& u; L5 B8 ^1 u! }3 p+ |8 I    create table db_student(
5 i9 _) ?% G) T1 Y- [      id int primary key auto_increment comment="主键",
$ X: e* x  B- e. e9 q* A! `      name varchar(15) comment="姓名",
2 ^. }& a  ^: g2 d7 R    )
/ o9 ^; s- O+ J; Y* z$ E; o9 Y  j    """4 E) g7 L2 {+ j; b; F/ U
    id = db.Column(db.Integer, primary_key=True,comment="主键")( I6 K/ Y, c, `
    name = db.Column(db.String(15), comment="姓名")) @7 P) W5 [) L; T9 i* a; m
    age = db.Column(db.SmallInteger, comment="年龄")
' ~8 Z- N. |2 |7 W5 h9 l" W    sex = db.Column(db.Boolean, default=True, comment="性别")+ c( H* `) x) O
    email = db.Column(db.String(128), unique=True, comment="邮箱地址")
( G$ N' [( {. ?4 e# D+ ~' Z    money = db.Column(db.Numeric(10,2), default=0.0, comment="钱包")  l, z5 {( r& {8 J' e1 f

  y2 `. ]+ j7 R2 ~* @- r+ N8 S    def __repr__(self):
* q, z, F/ @* \        return f"{self.name}<Student>"" f$ ?- H7 J2 s( K' {9 K
9 H: q+ Q7 ?9 z
# 所有的模型必须直接或间接继承于db.Model' }( e/ e4 a/ t- C1 H- e, E
class Course(db.Model):
0 p7 w! `2 u% R0 L+ _. ?$ V6 F    """课程数据模型"""
7 I7 s( v7 x% q( |% |    __tablename__ = "db_course"
# C5 _/ X+ N) [9 k9 J) f    id = db.Column(db.Integer, primary_key=True, comment="主键")
3 P; D. b9 U6 _$ [    name = db.Column(db.String(64), unique=True, comment="课程")
6 D  D. x' a; F9 l+ }  A    price = db.Column(db.Numeric(7, 2))6 F3 ?" L& E" t+ p
    # repr()方法类似于django的__str__,用于打印模型对象时显示的字符串信息
. R* a# Q. M" y4 T. z    def __repr__(self):
9 e- c* B1 O$ @        return f'{self.name}<Course>'# p/ u* J5 v- \- q

1 I& z2 @4 s% M% @class Teacher(db.Model):) l1 z- B$ L1 T& ~& D* F
    """老师数据模型"""8 d- _( a2 l9 ?( B
    __tablename__ = "db_teacher"
; F% Y) `4 v% V6 Z  b& `    id = db.Column(db.Integer, primary_key=True, comment="主键")& p6 a" U  b2 u; b, M5 {
    name = db.Column(db.String(64), unique=True, comment="姓名")9 @! `# c/ r' X$ V- b* U0 Y
    option = db.Column(db.Enum("讲师", "助教", "班主任"), default="讲师")  y" m. e8 \# G/ E4 B

, a" p% K6 K' w+ b+ b7 n. b) W    def __repr__(self):
/ i! V* D$ E/ |2 l, S2 b        return f"{self.name}< Teacher >"
5 ]/ s" K; S  U5 p1 G& T/ ]2 m  _  n4 |; E4 u* S& c% K/ S
@app.route("/")* Q8 o4 i9 E" D. v
def index():1 v0 U5 T: M- x5 i
    return "ok!"
4 g# p& @8 }) d' H# b9 ^! j8 k: D5 R
if __name__ == '__main__':
, ?# A' S0 `# f7 Z1 e$ w: N# A    with app.app_context():
# D* R0 i& K, X) f% K# e* Y9 c        # 检测数据库中是否存在和模型匹配的数据表。
0 B+ b% B1 _3 K4 U        # 如果没有,则根据模型转换的建表语句进行建表。
( x4 r* l6 ]7 x, X        # 如果找到,则不会进行额外处理
. }1 {$ g. E9 D2 a( m        db.create_all()
* |& f7 m8 Z# N7 e) u8 T6 y    app.run(debug=True)
7 X1 L2 j) S$ z/ q. Y$ S/ ]+ D

" C; m6 p- {! x0 ^
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 01:37 , Processed in 0.025025 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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