码迷,mamicode.com
首页 > 数据库 > 详细

sqlachemy使用总结

时间:2020-09-18 03:38:41      阅读:38      评论:0      收藏:0      [点我收藏+]

标签:实例   comm   details   对象   nested   入库   page   shu   添加   

在flask中使用ORM  sqlchemy

1.新建modles.py.     如果已有数据表,https://www.devmashup.com/generating-flask-sqlalchemy-models-with-flask-sqlacodegen/  用flask-sqlacodegen来转成models.py

2.models.py中的模型类可以指定排序方式          __mapper_args__ = {"order_by": createtime.asc()}

也可以在查询条件中使用 order_by方法

.order_by(Order.updatetime.desc())

3.可以指定外键,  关联信息,  这样查一个表的时候,会把关联信息也返回   查用户的时候orders字段返回订单信息,    查订单表的时候,company字段返回用户信息,两个表一对多,多的用外键

https://blog.csdn.net/cswenrou/article/details/105256519

order表
companyid = db.Column(db.Integer, ForeignKey("company.id"), info=‘公司ID‘)
company = relationship("Company", back_populates="orders")

company表
orders = relationship("Order", back_populates="company")

 

4.sqlachemy的数据查询使用modle模型orm,返回结果是模型对象,需要解析,使用flask_marshmallow;

新建schema.py,可以选择要返回的字段,返回字段的类型,嵌套数据

class OrderSchema(ma.SQLAlchemySchema):
    class Meta:
        model = Order
        fields = (
        "id", "orderno", "title", "paytime", "assignordertime", "price", "company")

    price = fields.Str()
    company = fields.Nested(CompanySchema, attribute="company")

  

5.或者不使用relationship,直接在代码中进行关联查询

https://www.cnblogs.com/shenckicc/p/6797990.html

outerjoin方法是左连接
filter方法是查询条件,要用模型.字段, 要使用 == >=等 filter_by 直接使用 字段=条件
with_entities查询指定的字段,返回的都是一个列表,列表内的元素是一个元组,不过不是 Python 内置的元组,是 sqlalchemy.util._collections.KeyedTuple。

使用这个方法返回的数据转成python的dict dict(zip(i.keys(), i))
paginate方法,分页查询
all方法查询全部
first方法查询一条
     pagination = Order.query.outerjoin(OrderLawyer, OrderLawyer.orderid == Order.id).filter(
            Order.state == current_app.config[‘ORDER_STATE_CONFIRM‘]
        ).with_entities(Order.id, Order.orderno, Order.title, Order.paytime, Order.price, Order.costprice).order_by(
            Order.updatetime.desc()).paginate(
            page, per_page=current_app.config[‘PER_PAGE‘], error_out=False
        )
        rows = pagination.items
        for i in rows:
            i = dict(zip(i.keys(), i))

  

 6. 添加一条数据后,马上要使用返回的id, 使用flush()马上入库

db.session.add(row)
db.session.flush()
ret = Pm()               #实例化模型对象
ret.objectid = row.id #flush 之后可以使用row.id
db.session.add(ret)         #添加记录
db.session.commit()        #提交事务
db.session.close()

 

 

------------恢复内容结束------------

sqlachemy使用总结

标签:实例   comm   details   对象   nested   入库   page   shu   添加   

原文地址:https://www.cnblogs.com/jackduan/p/13682275.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!