我正在连接Oracle DB,我无法控制。由于我必须在访问表之前定义自定义模式,因此自动化数据库对我来说不起作用。由于某些原因,sqlalchemy或oracle不知道如何自动增加id,因此我认为唯一的解决方案是反映表格。 SQLalchemy可以找到表,但问题是,当我尝试进行查询时,它会抱怨AttributeError: 'Table' object has no attribute 'column_a'
,当我打印所有列时,它会清楚地显示它们。它打印print([c.name for c in reflected_table_a.columns])
:['id','column_a',...]
# connecting the DB
engine = create_engine("oracle+cx_oracle://" +str(connection_string))
# reflecting tables
Base = declarative_base()
reflected_table_a = Table('TABLE_A',
Base.metadata,
# With this line I'm also getting the Invalid Identifier error
#Column('id', Integer, primary_key=True),
autoload=True,
autoload_with=engine,
schema='oracle_stuff'
)
# making the session
session = create_session(bind=engine)
session.query(reflected_table_a).filter(reflected_table_a.column_a == 'foo').all()
# here we are getting the "AttributeError: 'Table' object has no attribute 'column_a'" error
#this works just fine
session.query(reflected_table_a).all()
# gets all the rows
所以它几乎可以工作,但事实并非如此,因为如何解决这个问题。列名和表名与DB中的计数器部分匹配。