Flask flask_sqlalchemy直接执行SQL语句方法

本文介绍了如何使用Flask-SQLAlchemy直接执行复杂的SQL语句,包括定义SQL、传递参数、执行SQL以及处理返回的RowProxy对象,强调了对日期、时间、decimal类型的数据转换,以适应JSON序列化需求。

flask_sqlalchemy直接用SQL操作数据库
flask-sqlalchemy直接操作数据库带是比较简单,
1、定义SQL语名,一般直接操作SQL都是比较复杂的语句,我这里一两个表的联合查询,用relationship搞了半天没有搞定,自己熟悉SQL,就用SQL直接操作,在外部先将SQL语句搞好。
2、传递参数,可以将参数传递到SQL语名,这是必须的。
3、用db.session.execute(sql, {‘account_1’: account1})执行语名,并传递参数到SQL。
4、直接执行SQL返回的是不带TABLE字段头的纯数据组,需要进行转换。如果不转换进接进行json系列化为报,RowProxy对象不能进行系列化错误
5、根据自己定义的SQL语句结果,将输出表格转换为可以输出的Json格式
7、对于日期、时间、decimal类型需要进行一下转换,然后合并并接。

sql = "SELECT account_stocks.id AS id, " \
      "account_stocks.account AS account, " \
      "account_stocks.stock_code AS stock_code, " \
      "account_stocks.number AS number, " \
      "account_stocks.cost AS cost," \
      "stocks.stock_name as stock_name," \
      "stocks.current_price as current_price" \
      " FROM account_stocks,stocks" \
      " WHERE account_stocks.stock_code = stocks.stock_code " \
      "and account_stocks.account = :account_1"
#  返回的是rawProxy对象,还需要转为前端可以接受的Dict
stock_list = db.session.execute(sql, {'account_1': account1})
list1 = list(stock_list)
ret_list = []
for stock in list1:
    list1 = {'id': stock[0],
             'account': stock[1],
             'stock_code': stock[2],
             'number': float(stock[3]),
             'cost': float(stock[4]),
             'stock_name': stock[5],
             'current_price': float(stock[6])
             }
    ret_list.append(list1)
print(ret_list)
# stock_list = AccountStock.query.filter(
#     AccountStock.account == account1).all()
return json.dumps(ret_list, cls=AlchemyEncoder)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值