我对postgresql有0次经验,并且使用sqlalchemy将使用pylalchemy编写的应用程序部署到带有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。我无法控制。
答案 0 :(得分:21)
简单地转换为字符串:
db.session.query(Vehicle).filter(str(Car.id) == Vehicle.value)
如果Car.id
是一个int的局部变量。
如果需要在连接中使用它,请让数据库将其强制转换为字符串:
from sqlalchemy.sql.expression import cast
db.session.query(Vehicle).filter(cast(Car.id, sqlalchemy.String) == Vehicle.value)
如果另一列中的字符串值包含数字且可能包含空格,则可能需要考虑修剪,或者将字符串值转换为整数(并将整数列保留为整数)。