私はSQLAlchemyに不慣れで(一般的にORMではありません)、文字通り何も役に立たないという問題に直面しています。私ができることは、私がやりたいことであるクエリをハードコーディングすることだけです。
これがまさに私がやろうとしていることです(Pythonのコメントを参照して、何が機能するか、機能しないかを確認してください-
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy import MetaData, Table
import pypyodbc
connection_string = 'mssql+pyodbc://U:P@SERVER/DB'
Base = declarative_base()
class Item(Base):
__tablename__ = 'Items'
id = Column('Id', Integer, primary_key=True)
engine = create_engine(connection_string, echo=True, module=pypyodbc)
sm = sessionmaker(engine)
session = sm()
# WORKS
for row in engine.execute('select top 1 Id from Items'):
print(row)
# DOES NOT WORK
print(session.query(Item).get(111))
私が得ているエラーはですsqlalchemy.exc.NoSuchColumnError: "Could not locate column in row for column 'Items.Id'"
。
生成された SQL は正しい -
SELECT [Items].[Id] AS [Items_Id]
FROM [Items]
WHERE [Items].[Id] = 111
__tablename
存在しないものに変更すると、無効なオブジェクト名エラーが発生するため、正しいデータベースを指していることはわかっています。SQLAlchemy が私の列を見つけられないのはなぜですか?