【发布时间】:2018-03-12 16:53:50
【问题描述】:
使用 sqalchemy 初始化我的 postgres 数据库时,我收到一个 AttributeError: can't set attribute error:
Traceback (most recent call last):
File "manage.py", line 567, in <module>
manager.run()
File "/usr/local/lib/python3.6/site-packages/flask_script/__init__.py", line 417, in run
result = self.handle(argv[0], argv[1:])
File "/usr/local/lib/python3.6/site-packages/flask_script/__init__.py", line 386, in handle
res = handle(*args, **config)
File "/usr/local/lib/python3.6/site-packages/flask_script/commands.py", line 216, in __call__
return self.run(*args, **kwargs)
File "manage.py", line 26, in initdb
password="passwo",
File "<string>", line 4, in __init__
File "/usr/local/lib/python3.6/site-packages/sqlalchemy/orm/state.py", line 417, in _initialize_instance
manager.dispatch.init_failure(self, args, kwargs)
File "/usr/local/lib/python3.6/site-packages/sqlalchemy/util/langhelpers.py", line 66, in __exit__
compat.reraise(exc_type, exc_value, exc_tb)
File "/usr/local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 187, in reraise
raise value
File "/usr/local/lib/python3.6/site-packages/sqlalchemy/orm/state.py", line 414, in _initialize_instance
return manager.original_init(*mixed[1:], **kwargs)
File "/usr/local/lib/python3.6/site-packages/sqlalchemy/ext/declarative/base.py", line 700, in _declarative_constructor
setattr(self, k, kwargs[k])
File "/usr/local/lib/python3.6/site-packages/sqlalchemy/ext/hybrid.py", line 873, in __set__
raise AttributeError("can't set attribute") AttributeError: can't set attribute
表是这样定义的:
class User(db.Model, UserMixin):
"""
A user who has an account on the website.
"""
__tablename__ = 'user'
id = db.Column(db.Integer,
primary_key=True,
nullable=False,
unique=True,
autoincrement=True)
first_name = db.Column(db.String)
last_name = db.Column(db.String)
phone = db.Column(db.String)
email = db.Column(db.String, unique=True)
photo = db.Column(db.String, default="No Picture")
_password = db.Column(db.Binary(60))
并像这样初始化:
def initdb():
''' Create the SQL database. '''
db.create_all()
print(colored('The SQL database has been created', 'green'))
user2 = models.User(
first_name="Jane",
last_name="Doe",
phone="123",
email="test@test.test",
password="passwo",
)
db.session.add(user2)
如何正确初始化数据库?
更新 1: 我将我的 SQLAlchemy 从 1.2.5 降级到 1.1.15(按照https://github.com/puckel/docker-airflow/issues/160 中的建议,错误消失了。有没有办法规避 1.2.5 中的错误?
【问题讨论】:
-
这个问题仍然存在,将列名更改为“_password”对我不起作用我不得不从 1.4.0 降级到 1.1.15,然后我能够使用 db 创建数据库。 create_all() @bear 感谢您的更新 1 干杯
标签: python python-3.x postgresql sqlalchemy flask-sqlalchemy