flask -sqlalchemy. Тип PhoneNumber - PullRequest
       4

flask -sqlalchemy. Тип PhoneNumber

1 голос
/ 10 января 2020

models.py

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    Name = db.Column(db.String(80), nullable=False)
    # Phone = db.Column(), nullable=False) what kind of type can be here?

Я нашел решение при использовании sqlalchemy-utils, однако в flask -sqlalchemy это решение не поддерживается.

from sqlalchemy_utils import PhoneNumber


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), nullable=False)
    _phone_number = db.Column(db.Unicode(255))
    phone_country_code = db.Column(db.Unicode(8))

    phone_number = db.orm.composite(
        PhoneNumber,
        _phone_number,
        phone_country_code
    )

Я получаю сообщение об ошибке при вызове flask migrate:

Traceback (most recent call last):
  File "/source/venv/bin/flask", line 10, in <module>
    sys.exit(main())
  File "/source/venv/lib/python3.7/site-packages/flask/cli.py", line 966, in main
    cli.main(prog_name="python -m flask" if as_module else None)
  File "/source/venv/lib/python3.7/site-packages/flask/cli.py", line 586, in main
    return super(FlaskGroup, self).main(*args, **kwargs)
  File "/source/venv/lib/python3.7/site-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/source/venv/lib/python3.7/site-packages/click/core.py", line 1132, in invoke
    cmd_name, cmd, args = self.resolve_command(ctx, args)
  File "/source/venv/lib/python3.7/site-packages/click/core.py", line 1171, in resolve_command
    cmd = self.get_command(ctx, cmd_name)
  File "/source/venv/lib/python3.7/site-packages/flask/cli.py", line 542, in get_command
    rv = info.load_app().cli.get_command(ctx, name)
  File "/source/venv/lib/python3.7/site-packages/flask/cli.py", line 388, in load_app
    app = locate_app(self, import_name, name)
  File "/source/venv/lib/python3.7/site-packages/flask/cli.py", line 240, in locate_app
    __import__(module_name)
  File "/source/project.py", line 1, in <module>
    from app import create_app, db
  File "/source/app/__init__.py", line 30, in <module>
    from app import models
  File "/source/app/models.py", line 89, in <module>
    class User(db.Model):
  File "/source/app/models.py", line 101, in User
    phone_number = db.orm.composite(
AttributeError: 'SQLAlchemy' object has no attribute 'orm'

Какие варианты доступны для сохранения номера телефона в базе данных с помощью flask -sqlalchemy?

1 Ответ

1 голос
/ 10 января 2020

Согласно их документации , объект SQLAlchemy из Flask -SQLAlchemy предоставляет вам (прямой) доступ ко всем функциям et c. из sqlalchemy и sqlalchemy.orm пространств имен, поэтому вместо

db.orm.composite

используйте просто

db.composite
...