Я прохожу кривую обучения sqlalchemy, и я иду кругом, немного. Мой SQL довольно ржавый (возможно, примитивный), и я хочу использовать возможности ORM в новом проекте, который я собираюсь начать, поэтому я делаю некоторые начальные взломы, чтобы укрепить в этом уверенность.
Я работаю на MacOS 10.15.4, и это моя среда, которая актуальна вместе со всеми пакетами python, если это актуально.
Python 3.8.2 (default, Mar 28 2020, 12:50:30)
[Clang 11.0.0 (clang-1100.0.33.17)] on darwin
pyodbc 4.0.30
SQLAlchemy 1.3.15
Я пытаюсь Дисплей, как мне кажется, является простым SELECT * FROM table
запросом и просто распечатывает строку (как в данных в строке). Но когда я запускаю следующий код, я просто получаю список объектов, а не данные. Все ссылки, которые я видел, предполагают, что это должно работать, и я могу получить доступ к определенным c столбцам, как примеры. Я могу использовать даже .___dict___
для отображения в виде словаря Python (не показан, поскольку в нем есть личные данные), и я получаю пары ключ: значение, а также "_sa_instance_state": ". Есть ли способ или другой способ доступа к данным без необходимости знать / указывать имя столбца в качестве атрибута, например, «Answer.Answer_Id»?
Но я иду по кругу со справочной документацией и мой GoogleFu подводит меня. Любое руководство будет по достоинству оценено.
engine = create_engine('mssql+pyodbc://%s' % con_string)
Base = automap_base()
Base.prepare(engine, reflect=True)
Answer = Base.classes.Answer
session = Session(bind=engine)
query = session.query(Answer).limit(10).all()
for row in query:
print(row)
Вот результат, который я получу:
<sqlalchemy.ext.automap.Answer object at 0x10ddb0b80>
<sqlalchemy.ext.automap.Answer object at 0x10ddb0c10>
<sqlalchemy.ext.automap.Answer object at 0x10ddb0e80>
<sqlalchemy.ext.automap.Answer object at 0x10ddb0ee0>
<sqlalchemy.ext.automap.Answer object at 0x10ddb0f40>
<sqlalchemy.ext.automap.Answer object at 0x10ddb0fa0>
<sqlalchemy.ext.automap.Answer object at 0x10ddb0fd0>
<sqlalchemy.ext.automap.Answer object at 0x10ddb5070>
<sqlalchemy.ext.automap.Answer object at 0x10ddb5100>
<sqlalchemy.ext.automap.Answer object at 0x10ddb5190>
Process finished with exit code 0
Если я поменяю print(row)
на print(row.AnswerId)
, я получу данные:
1
2
3
4
5
6
7
8
9
10
Process finished with exit code 0