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

被折叠的 条评论
为什么被折叠?



