Flask-sqlalchemy – 读MySQL案例

初次学习 Flask 框架时,检索相关操作或者示例代码,网上90%的博客文章清一色的抄官方示例,并没有实际的帮助到我。所以在此记录下一些主要的操作与示例,也希望可以帮助到初学者。

所用数据库 takeout 其表为

mysql> show tables ;
+----------------------------+
| Tables_in_takeout          |
+----------------------------+
| distribution_operation     |
| distribution_platform      |
| distribution_platform_data |
| order_data                 |
| other_store_data           |
| store_basic_informations   |
| store_operation_data       |
+----------------------------+

初始化

from flask import Flask , render_template
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:root@localhost/takeout"
db = SQLAlchemy(app)

@app.route("/")
def index() :
    return "hello"

if __name__ == "__main__" :
    app.run( host="0.0.0.0" , debug=True )

读取方法一 : 使用SQL语句

这种方法最为简单,方便 ,只需调用
db.session.execute( ” SQL语句 ” ) 即可。
在index函数中加入以下语句

    result = db.session.execute( "show tables" )
    print( result )

输出 :
<sqlalchemy.engine.cursor.CursorResult object at 0x00000255115F3FD0>

一个sqlalchemy对象,它还没实际的对 MySQL 进行操作,这个对象中有一个 all() 函数成员,可以把它理解为一个触发器,调用它时,就会实际的对数据库进行连接

    print( result.all() )

输出 :
    [('distribution_operation',), ('distribution_platform',), ('distribution_platform_data',), ('order_data',), ('other_store_data',), ('store_basic_informations',), ('store_operation_data',)]

就如输出一样,返回了正确的结果

读取方法二 : 使用Model类提供的方法

这种方法在构建期间比较麻烦,相对的,提供更好的操作。
此方法在读取库中的某个表之后,会将这个表装入一个类,这个类的类名要和要读取的表的名字相同,其属性也要和表中的字段一致,但是,并不是要声明全部字段。例如,表 order_data 的结构如下

mysql> show columns from order_data ;
+-----------------------+--------------+------+-----+---------+----------------+
| Field                 | Type         | Null | Key | Default | Extra          |
+-----------------------+--------------+------+-----+---------+----------------+
| id                    | int          | NO   | PRI | NULL    | auto_increment |
| restaurant_inside_id  | varchar(255) | YES  |     | NULL    |                |
| 该订单整体时效        | varchar(255) | YES  |     | NULL    |                |
| 该订单接单时效        | varchar(255) | YES  |     | NULL    |                |
| 该订单到店时效        | varchar(255) | YES  |     | NULL    |                |
| 该订单取餐时效        | varchar(255) | YES  |     | NULL    |                |
| 该订单送达时效        | varchar(255) | YES  |     | NULL    |                |
| 该订单评价            | varchar(255) | YES  |     | NULL    |                |
+-----------------------+--------------+------+-----+---------+----------------+

我要读取这个表的十个 id ,需要构建同名的类 , 此类需要继承一个数据库的基类,并且使用 db.session.query() 而不是 db.session.execute()

class order_data( db.Model ) :
    id = db.Column( db.Integer , primary_key=True )

@app.route("/")
def index() :
    result = db.session.query( order_data.id ).limit(10).all()
    print( result )
    return "hello"

输出 :
[(10,), (11,), (12,), (13,), (14,), (15,), (16,), (17,), (18,), (19,)]

如上,这里只用到了 id 字段 ,那么在类中只声明 id 字段即可 ,如果你好奇,把不带”触发器all()”的 result 输出 , 将会得到以下输出

SELECT order_data.id AS order_data_id
FROM order_data
 LIMIT %s

这种方法读取数据库之后,Flask-sqlalchemy 会把这些数据放入对应的类中,且提供了一些好用的方法,这是优点 。既然会将数据放入对应的类中,那么类对应的属性和类型,要和表中的字段及类型相同 , 而且,类名也要和表名相同 , 看完上面的输出就可以理解了 。

Original: https://blog.csdn.net/lllzg000/article/details/121781296
Author: lyozg
Title: Flask-sqlalchemy – 读MySQL案例

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/749165/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球