【发布时间】:2017-02-01 17:11:31
【问题描述】:
我正在将 Web 应用程序的旧 SQL 实现更改为烧瓶炼金术,并且在对应方面遇到了一些困难。
旧代码如下所示。它对某些属性进行名称查询并返回 csv 样式文本。
header = 'id,display_name,city,state,latitude,longitude\n'
base_query = '''SELECT id, bbs_id, city, state,
latitude, longitude FROM mytable'''
conn = sqlite3.connect(path.join(ROOT,'db.sqlite'))
c = conn.execute(base_query+'WHERE name=?', (name,))
results = c.fetchall()
conn.close()
rows = [','.join(map(str, row)) for row in results]
return header + rows
新代码
header = 'id,display_name,city,state,latitude,longitude\n'
cols = ['id', 'bbs_id', 'city', 'state', 'latitude', 'longitude']
users = User.query.filter_by(name=name).all()
rows = ''
for user in users:
rows += ','.join([user.id, user.bbs_id, user.city, user.state, user.latitude, user.longitude]) + '\n'
return header + rows
我对新代码不满意,因为它太冗长了。
- 有没有办法只选择
cols中的那些而不是查询所有列然后选择需要的列? - 如果没有,是否可以更简洁地写
','.join()?看来user['id']不起作用,我必须做user.id。
【问题讨论】:
标签: python sql sqlalchemy flask-sqlalchemy