12

我对 postgresql 有 0 经验,并且正在使用 sqlalchemy 将一个用 python 编写的应用程序部署到带有 postgres 的服务器上。

对于开发,我使用了 sqlite 服务器。

事情进展得很顺利,但我遇到了一个不知道如何解决的问题。

我有三张看起来像这样的桌子

class Car(db.Model):
     id= db.Column(db.Integer, primary_key=True)
     ...

class Truck(db.Model):
     id= db.Column(db.String(32), primary_key=True)
     ...

class Vehicles(db.Model):
     id= db.Column(db.Integer, primary_key=True)
     type= db.Column(db.String) #This is either 'car' or 'truck'
     value= db.Column(db.String) #That's the car or truck id
     ...

我有一个查询从Vehicles哪里选择type = 'car' AND value = 10 这是抛出一个错误: sqlalchemy.exc.ProgrammingError: (ProgrammingError) operator does not exist: integer = character varying

所以我想这是因为 Car.id它是一个 int 并且Vehicle.value是一个字符串..

如何在 sqlalchemy 中编写此查询?有没有办法编写它并使其与我的 sqlite 开发环境和 pgsql 生产兼容?

目前看起来像这样

db.session.query(Vehicle).filter(Car.id == Vehicle.value)

PS:卡车 id 必须是字符串,汽车 id 必须是 int。我对此没有控制权。

4

1 回答 1

34

只需转换为字符串:

db.session.query(Vehicle).filter(str(Car.id) == Vehicle.value)

ifCar.id是一个 int 的局部变量。

如果您需要在连接中使用它,请让数据库将其转换为字符串:

from sqlalchemy.sql.expression import cast

db.session.query(Vehicle).filter(cast(Car.id, sqlalchemy.String) == Vehicle.value)

如果另一列中的字符串值包含数字和可能的空格,您可能必须考虑修剪,或者将字符串值转换为整数(并将整数列保留为整数)。

于 2012-09-28T16:26:31.283 回答