我有一个使用SQLAlchemy的应用程序,当我使用SQLite时运行良好。但是,当我迁移到PostgreSQL时,发现自己甚至无法进行合并。这是我无法用于合并项目的表的模型:
class Item(db.Model):
__tablename__ = "prices"
defindex = db.Column(db.Integer, primary_key=True)
quality = db.Column(db.Integer, primary_key=True)
craftable = db.Column(db.Boolean, primary_key=True)
tradeable = db.Column(db.Boolean, primary_key=True)
item_metadata = db.Column(db.String(70), primary_key=True)
name = db.Column(db.String(70), primary_key=True)
currency = db.Column(db.String(70))
price = db.Column(db.Float)
price_high = db.Column(db.Float)
这是我尝试进行合并的方式(假设所有变量的确分配了正确的值):
new_item = Item(defindex=int(defindex), quality=int(quality), craftable=bool(is_craft),
tradeable=bool(is_trade), item_metadata=int(priceindex), currency=str(currency),
price=float(price), price_high=float(price), name=str(name))
但是在这个电话上,我得到一个错误:
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) operator does not exist: character varying = integer
LINE 3: ... prices.tradeable = true AND prices.item_metadata = 0 AND pr...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
[SQL: 'SELECT prices.defindex AS prices_defindex, prices.quality AS prices_quality, prices.craftable AS prices_craftable, prices.tradeable AS prices_tradeable, prices.item_metadata AS prices_item_metadata, prices.name AS prices_name, prices.currency AS prices_currency, prices.price AS prices_price, prices.price_high AS prices_price_high \nFROM prices \nWHERE prices.defindex = %(param_1)s AND prices.quality = %(param_2)s AND prices.craftable = %(param_3)s AND prices.tradeable = %(param_4)s AND prices.item_metadata = %(param_5)s AND prices.name = %(param_6)s'] [parameters: {'param_1': 1067, 'param_3': True, 'param_6': 'Grandmaster', 'param_5': 0, 'param_4': True, 'param_2': 1}]
我尝试在创建时添加所有类型转换new_item
,但没有用,错误仍然存在。我应该怎么做才能解决?
列item_metadata
定义为字符串,因此它必须是字符串。使用SQLite之所以起作用,是因为SQLite使用了动态类型。它不强制执行数据类型约束。任何类型的数据都可以(通常)插入任何列中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句