当前位置:  开发笔记 > 编程语言 > 正文

sqlalchemy postgresql其中int = string

如何解决《sqlalchemypostgresql其中int=string》经验,为你挑选了1个好方法。

我有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.我无法控制.



1> Martijn Piet..:

简单地转换为字符串:

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)

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

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有