整数的无效输入语法(字符串)

时间:2017-11-02 00:24:30

标签: python postgresql sqlalchemy

我正在尝试在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 提前谢谢!

1 个答案:

答案 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]))

效果很好,还会在usercategories表格中创建相应的条目。

注意:您必须调用 commit() session方法。