SQLAlchemy不能正确转换包含__字符的列



我试图在用Django编写的web应用程序中查询SQLAlchemy的bigquery数据集。表名是TestBillingAcctLkp,它有一个特殊的列__of_projects(前面有两个下划线)

我这样定义了模型对象:

class TestBillingAcctLkp(Base):
__tablename__ = 'TestBillingAcctLkp'
Billing_account_name = Column(String)
Billing_account_ID = Column(String,primary_key=True)
Parent_account_ID=Column(String)
Status=Column(String)
__of_projects=Column(Integer)

视图,我使用这个:

session.query(TestBillingAcctLkp).order_by(text("Billing_account_name asc")).all()
当我查询时,我得到这样的SQL:
SELECT `TestBillingAcctLkp`.`Billing_account_name` AS `TestBillingAcctLkp_Billing_account_name`, `TestBillingAcctLkp`.`Billing_account_ID` AS `TestBillingAcctLkp_Billing_account_ID`, `TestBillingAcctLkp`.`Parent_account_ID` AS `TestBillingAcctLkp_Parent_account_ID`, `TestBillingAcctLkp`.`Status` AS `TestBillingAcctLkp_Status`, `TestBillingAcctLkp`.`_TestBillingAcctLkp__of_projects` AS `TestBillingAcctLkp__TestBillingAcctLkp__of_projects` FROM `TestBillingAcctLkp` ORDER BY Billing_account_name asc

我观察到_TestBillingAcctLkp被附加到这个列__of_projects的前面,它在SQL查询翻译中变成了_TestBillingAcctLkp__of_projects,因此我得到这个错误:

Exception: (google.cloud.bigquery.dbapi.exceptions.DatabaseError) 400 Name _TestBillingAcctLkp__of_projects not found inside TestBillingAcctLkp at

如何解决这个问题?

默认情况下,Python将用两个带类名的下划线组合类变量——这被称为名称混淆。

如果数据库中的列有两个前导下划线,您可以在列定义中指定它,并将类变量分配给不带前导下划线的名称。

class TestBillingAcctLkp(Base):
__tablename__ = 'TestBillingAcctLkp'
...
of_projects=Column('__of_projects', Integer)

最新更新