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