2016-01-14 65 views
0

我最近开始使用数据库。我正在尝试使用SQLalchemy建立模型。在models.py和database.py显示如下:NOT NULL约束SQLachemy模型失败

#models.py 

import sqlalchemy as sa 
from sqlalchemy.ext.declarative import declarative_base 

Base = declarative_base() 

class Expense(Base): 
    __tablename__ = 'expense' 
    id = sa.Column(sa.BigInteger, primary_key=True) 
    username = sa.Column(
         sa.String, 
         info={'label': 'Name'}, 
         nullable=False 
    ) 
    def __init__(self, username): 
     self.username = username 

    def __repr__(self): 
     return '<User %r>' % (self.username) 

#database.py 

from sqlalchemy import create_engine 
from sqlalchemy.orm import sessionmaker 
from models import Base, Expense 


def init_db(): 
    engine = create_engine('sqlite:///test.db') 
    Base.metadata.create_all(engine) 
    Base.metadata.bind = engine 
    DBSession = sessionmaker(bind=engine) 
    session = DBSession() 

    new_entry = Expense(username="noobie") 
    session.add(new_entry) 
    session.commit() 

init_db() 

我在python3运行这些,当我跑database.py,我得到

一个响应here表明使用sqlite_autoincrement=True可以解决问题,但它不适用于我的。我认为在分配主键时SQLite3和sqlalchemy之间会出现问题......我不太清楚。请帮助这个可怜的noobie,谢谢!

+0

嗨@ return-0,你忘了我在开始导入;) –

+0

@AndyK感谢您指出了。不幸的是,这是由于我的复制粘贴技巧不佳。问题不在于我的真实代码。 –

+0

我有一段时间没有使用SQLAlchemy,但我相当确定这不是您为Flask应用程序设置的方式。你应该在标准的SQLAlcehmy上使用'flask-sqlalchemy':http://flask-sqlalchemy.pocoo.org/2.1/quickstart/ – IanAuld

回答

0

我在sqlite3中没有太多的经验,但在postgresql中,您应该使用autoincrement=True与您的pkey列。

那么,试着用这样的ID列来实现这一点:

id = sa.Column(sa.BigInteger, primary_key=True, autoincrement=True) 
相关问题