sqlalchemy.dialects.mysql中的INTEGER在其__init__方法中没有参数?

时间:2016-12-21 22:53:45

标签: python mysql python-3.x sqlalchemy flask-sqlalchemy

我正在尝试为我的数据库创建模型,并计划使用MySQL作为数据库。我想创建未签名的MySQL INTEGER模型的各种属性,并找到建议从sqlalchemy.dialects.mysql导入类型的文章,例如INTEGERBOOLEAN,{{1} }以指定MySQL特定的约束。

这是我的尝试:

VARCHAR

但是,定义import datetime import sqlalchemy from sqlalchemy.dialects.mysql import INTEGER, BOOLEAN, VARCHAR from app_name import app, db class User(db.Model): __tablename__ = 'User' id = db.Column(sqlalchemy.dialects.mysql.INTEGER(usigned=True), primary_key=True, autoincrement=True, nullable=False) realname = db.Column(VARCHAR(256), nullable=False) username = db.Column(VARCHAR(256), nullable=False) joined = db.Column(db.TIMESTAMP, default=datetime.datetime.now) email = db.Column(VARCHAR(255), nullable=False) 属性的行的两种变体都是: id

db.Column(sqlalchemy.dialects.mysql.INTEGER(usigned=True), primary_key=True, autoincrement=True, nullable=False)

因以下错误/回溯的某些变化而失败:

db.Column(INTEGER(usigned=True), primary_key=True, autoincrement=True, nullable=False)

了解我的尝试失败的原因?

1 个答案:

答案 0 :(得分:1)

一般情况下,当您看到这样的错误时,您应该对所传递的属性的名称保持警惕。

错误实质上是object.__init__得到了一个它并不期待的论点。当您将参数传递给**kwargs定义的__init__时,会发生这种情况,该object.__init__未经过处理并在super调用期间被发送至class ExampleINTEGER: def __init__(self, **kwargs): # if unsigned is passed, grab it self.unsigned = kwargs.pop('unsigned', None) # yada yada for the rest of the expected args # if it isn't found, it gets forwarded :/ super().__init__(**kwargs) >>> ExampleINTEGER(unsigned=True) <__main__.ExampleINTEGER at 0x7f41a048f978> >>> ExampleINTEGER(usigned=True) TypeErrorTraceback (most recent call last) <ipython-input-15-4b996bd42b90> in <module>() ----> 1 ExampleINTEGER(usigned=True) <ipython-input-13-6e67a8d8cdde> in __init__(self, **kwargs) 4 self.unsigned = kwargs.pop('unsigned', None) 5 # if it isn't found, it gets forwarded :/ ----> 6 super().__init__(**kwargs) TypeError: object.__init__() takes no parameters (例如)。

使用以下代码段重现类似的情况:

unsigned

在您的情况下,(在我创建的模拟示例中)您使用usigned拼错了Select: - )