我正在尝试在apache2服务器上运行一个小应用程序,我使用的原始数据库是Sqlite,现在我正在切换到Postgresql。该项目使用Flask和Sqlalchemy,我得到500内部错误,错误日志表示整数的无效输入语法(类别中名称列中的项目)。
我已将问题的根源缩小到以下几行,但目前无法解决问题。 的addItem(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的错误日志部分是:
[Tue Oct 31 16:17:18.814754 2017] [wsgi:error] [pid 1631:tid 140448423360256] [客户端75.155.173.141:51827] psycopg2.DataError: 整数的输入语法无效:“攻击伤害”
"攻击伤害"是Categories.name 提前谢谢!
答案 0 :(得分:0)
我不相信它,然后我用sqlite创建了一个MCVE,它没有引发错误。但它创建了一个无效的数据库as you can see here
显然"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
方法。