如何使用sqlalchemy获取表列名称和值?
使用我所拥有的,我能够检索:
(2, 'blue', 'square')
但我想得到的是:
{'id': 2, 'color': 'blue', 'type': 'square'}
贝娄,我在阅读this documentation for version 0.9后写的内容:
ConnectionManager.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sqlalchemy
from sqlalchemy import Table, MetaData
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
location = 'localhost'
engine_str = 'mysql+mysqlconnector://xx:xx@{}/xx'.format(location)
engine = sqlalchemy.create_engine(engine_str, echo=False)
session = sessionmaker(bind=engine)
connection = engine.connect()
session = session(bind=connection)
metadata = MetaData()
Base = declarative_base()
class SelectType(object):
"""
Server's details on database
"""
def go(self, s, cc, pp):
__table__ = Table('servers', metadata, autoload=True, autoload_with=engine)
result = s.query(__table__).filter_by(color=cc).filter_by(type=pp).all()
return result
def select_type(e, p):
"""
return SelectType result
"""
try:
return SelectType().go(session, e, p)
except:
raise
finally:
session.close()
mainfile.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from resources import connection_manager
if __name__ == "__main__":
try:
for i in connection_manager.select_type('blue', 'square'):
print(i)
重要的是要注意我正在使用自动加载
答案 0 :(得分:4)
在这里使用Query.column_descriptions
:
class SelectType(object):
def go(self, s, cc, pp):
__table__ = Table('servers', metadata, autoload=True, autoload_with=engine)
result = s.query(__table__).filter_by(color=environment).filter_by(type=pp)
column_names = [c["name"] for c in result.column_descriptions]
return [dict(zip(column_names, row)) for row in result.all()]
答案 1 :(得分:2)
我对此很新,所以我可能会误解你的问题。但看起来你想要你的数据是JSON。
我不知道你是否可以使用connection_manager.select_type访问密钥,但值得一试的是:
for k,v in connection_manager.select_type('blue', 'square'):
print(k)
print(v)
其中k是键,v是值。这可能是一种迭代它的可能方式。
此问题与此处的其他帖子半关联:SQLAlchemy: Knowing the field names and values of a model object?也可能对您有所帮助。祝你好运!