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

flask 操作数据库相关代码

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2024-7-12 00:18:17 | 显示全部楼层 |阅读模式
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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 00:26 , Processed in 0.015477 second(s), 21 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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