我正在尝试在 apache2 服务器上运行一个小应用程序,我使用的原始数据库是 Sqlite,现在我正在切换到 Postgresql。该项目使用 Flask 和 Sqlalchemy,我得到 500 内部错误,错误日志显示整数输入语法无效(类别中名称列中的项目)。
我已将问题的根源缩小到以下几行,但目前无法解决问题。添加项目(DBSampleData.SampleItem)
def addItem(item):
for i in item:
items = Item(name=i[0], price=i[1], description=i[2],
category_ID=i[3], user_ID=i[4])
session.add(items)
session.commit
SampleItem 之一是:
('Maelstrom','2800',
'A hammer forged for the gods themselves, '
'Maelstrom allows its user to harness the '
'power of lightning.',
'Attack Speed',"guberland")
类别数据库设置部分是:
class User(Base):
__tablename__ = 'user'
ID = Column(Integer, primary_key=True)
name = Column(String(250), nullable=False)
class Categories(Base):
__tablename__ = 'categories'
ID = Column(Integer, primary_key=True)
name = Column(String(250), nullable=False)
class Item(Base):
__tablename__ = 'item'
ID = Column(Integer, primary_key=True)
name = Column(String(250), nullable=False)
description = Column(String(250))
price = Column(String(8))
category_ID = Column(Integer, ForeignKey('categories.ID'))
category = relationship(Categories)
user_ID = Column(Integer, ForeignKey('user.ID'))
user = relationship(User)
来自 apache2 的错误日志部分是:
[2017 年 10 月 31 日周二 16:17:18.814754] [wsgi:error] [pid 1631:tid 140448423360256] [client 75.155.173.141:51827] psycopg2.Dataackt 的输入语法无效:无效输入语法
其中“攻击伤害”是 Categories.name 提前致谢!
我不会相信它,然后我用 sqlite 创建了一个 MCVE,它没有引发错误。但它创建了一个无效的数据库,正如你在这里看到的
显然"Attack Speed"
不是category_ID
和"guberland"
不是user_ID
。您需要为现有对象提供 ID,或者,对于 CRUD 应用程序更好,为以下对象提供数据库对象relationship
:
db_item = Item(
name=i[0], price=i[1], description=i[2],
category=Categories(name=i[3]), user=User(name=i[4]))
效果很好,还可以在user
和categories
表中创建适当的条目。
注意:你必须调用的commit()
方法session
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句