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 会把这些数据放入对应的类中,且提供了一些好用的方法,这是优点 。既然会将数据放入对应的类中,那么类对应的属性和类型,要和表中的字段及类型相同 , 而且,类名也要和表名相同 , 看完上面的输出就可以理解了 。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值