【问题标题】:Flask Sqlalchemy Oracle TypeError: id() takes exactly one argument (0 given)Flask Sqlalchemy Oracle TypeError: id() 只接受一个参数(给定 0)
【发布时间】:2020-07-08 10:28:05
【问题描述】:

Flask Sqlalchemy 模型

class Supplier(db.Model):
    __tablename__ = 'SUPPLIER'

    supplier_id = db.Column(db.Integer, primary_key=True)
    supplier_name = db.Column(db.Text, nullable=False)
    enable = db.Column(db.Boolean, nullable=False, default=True)
    insert_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)

当我尝试添加新供应商时,出现错误

db.session.add(Supplier(supplier_name="sup"))
db.session.commit()

堆栈跟踪:

            db.session.add(supplier_name="sup")
      File "<string>", line 2, in __init__
      File "c:\program files (x86)\microsoft visual studio\shared\python37_64\lib\site-packages\sqlalchemy\orm\instrumentation.py", line 376, in _new_state_if_none
        state = self._state_constructor(instance, self)
      File "c:\program files (x86)\microsoft visual studio\shared\python37_64\lib\site-packages\sqlalchemy\util\langhelpers.py", line 883, in __get__
        obj.__dict__[self.__name__] = result = self.fget(obj)
      File "c:\program files (x86)\microsoft visual studio\shared\python37_64\lib\site-packages\sqlalchemy\orm\instrumentation.py", line 202, in _state_constructor
        self.dispatch.first_init(self, self.class_)
      File "c:\program files (x86)\microsoft visual studio\shared\python37_64\lib\site-packages\sqlalchemy\event\attr.py", line 322, in __call__
        fn(*args, **kw)
      File "c:\program files (x86)\microsoft visual studio\shared\python37_64\lib\site-packages\sqlalchemy\orm\mapper.py", line 3367, in _event_on_first_init
        configure_mappers()
      File "c:\program files (x86)\microsoft visual studio\shared\python37_64\lib\site-packages\sqlalchemy\orm\mapper.py", line 3255, in configure_mappers
        mapper._post_configure_properties()
      File "c:\program files (x86)\microsoft visual studio\shared\python37_64\lib\site-packages\sqlalchemy\orm\mapper.py", line 1950, in _post_configure_properties
        prop.init()
      File "c:\program files (x86)\microsoft visual studio\shared\python37_64\lib\site-packages\sqlalchemy\orm\interfaces.py", line 196, in init
        self.do_init()
      File "c:\program files (x86)\microsoft visual studio\shared\python37_64\lib\site-packages\sqlalchemy\orm\relationships.py", line 1983, in do_init
        self._process_dependent_arguments()
      File "c:\program files (x86)\microsoft visual studio\shared\python37_64\lib\site-packages\sqlalchemy\orm\relationships.py", line 2012, in _process_dependent_arguments
        setattr(self, attr, attr_value())
    TypeError: id() takes exactly one argument (0 given)

我已经尝试了以下方法,但仍然无法正常工作。

  1. 添加序列

    id_seq = db.Sequence('id_seq')
    supplier_id = db.Column(db.Integer, id_seq, server_default=id_seq.next_value(), primary_key=True)
    
  2. 添加构造函数

     def __init__(self, supplier_name):
         self.supplier_name = supplier_name
    

我已经确保表存在,并且所有列都已成功生成。 似乎不仅这个表有这个问题,而且我插入的任何表也会引发这个错误。 以前我使用 PostgresDB 没有问题,现在我切换到 oracle 有这个错误。 请帮忙!

【问题讨论】:

    标签: python flask flask-sqlalchemy


    【解决方案1】:

    我自己想通了。

    最后 3 行,remote_side 应该是“node_id”而不是“id”

    【讨论】:

    • 看,问题中甚至没有提到的那些行;)
    • 是的,我不知道是模型问题,因为 create_all_table 和 drop_all_table 都没有错误。
    猜你喜欢
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多