2017-11-02 22 views
0

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") 

とカテゴリDB設定部である。

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] [client 75.155.173.141:51827] psycopg2.DataError: invalid input syntax for integer: “Attack Damage”

ここで、 "Attack Damage"はCategories.nameです ありがとうございます!

+0

トレースバックを投稿できますか? – yash

+0

'ID'を自動増分に設定していないので、' Categories'に 'ID'を渡す必要があります。また、 'session.commit()'の括弧を忘れました – kstullich

+0

@kstullich ID = Column(Integer、primary_key = True、autoincrement = True)に変更しようとしましたが、問題を解決できませんでした。 – guberland

答えて

0

私はそれを信じていないでしょうし、sqliteでMCVEを作成しましたが、エラーは発生しませんでした。しかし、それは無効なデータベースを作成し、明らかにas you can see here

"Attack Speed"category_IDないと"guberland"user_IDではありません。あなたは、どちらかの必要なCRUDアプリケーション、relationshipのデータベースオブジェクトのための既存のオブジェクトにIDを提供し、または、非常に良く:

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とする必要があります。

+0

これは本当に私の問題を解決します!どうもありがとう! – guberland

関連する問題