Flask-sqalchemy和oracle数据库id不能自动增量

时间:2017-05-24 09:31:45

标签: python database flask oracle11g flask-sqlalchemy

我想在我的数据库(Oracle 11g,但是Ubuntu 16.04的Express Edition)中使用带有SQLAlchemy模块的Python和Flask框架创建一个新表。表和ID的第一个字段是Integer字段,我希望它自动增量,但Oracle数据库不支持自动增量。我有一个表单来添加新评论,但是当我尝试添加新记录时,它会报告错误:

sqlalchemy.exc.IntegrityError:(cx_Oracle.IntegrityError)ORA-01400:无法插入NULL(“WIKTOR”。“TBL_COMENTARIOS”。“ID”)[SQL:'INSERT INTO tbl_comentarios(usuario,comentario,fecha)VALUES (:usuario,:comentario,:fecha)返回tbl_comentarios.id INTO:ret_0'] [参数:{'usuario':'wiktor','comentario':'hola','fecha':datetime.datetime(2017,5 ,24,11,23,45,39450),'ret_0':}]

基本上它说ID不能为null,这是因为表单中没有字段要添加它,所以它将id发送为空,然后数据库模型的自动增量不起作用。这是代码:

db = SQLAlchemy()

class Comentarios(db.Model):
    __tablename__ = 'tbl_comentarios'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    usuario = db.Column(db.String(50))
    comentario = db.Column(db.Text())
    fecha = db.Column(db.DateTime, default = datetime.datetime.now)

def __init__(self, usuario, comentario):
    self.usuario = usuario
    self.comentario = comentario

我也尝试过:

id = db.Column(db.Integer, primary_key=True)

该代码在SQL数据库中有效,但在Oracle数据库中均无效。

对不起我的英语,我希望有人可以帮助我...... 谢谢!

1 个答案:

答案 0 :(得分:2)

您可以找到here讨论此问题的SQLAlchemy文档。 Oracle没有自动增量功能,依赖于序列来模仿行为。

因此,您的id列应如下所示:

id_seq = Sequence('id_seq')
id = db.Column(db.Integer, id_seq,
        server_default=id_seq.next_value(), primary_key=True)