我正在尝试为我的数据库创建模型,并计划使用MySQL作为数据库。我想创建未签名的MySQL INTEGER
模型的各种属性,并找到建议从sqlalchemy.dialects.mysql
导入类型的文章,例如INTEGER
,BOOLEAN
,{{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)
了解我的尝试失败的原因?
答案 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
: - )