Какое значение имеет схема, определенная с помощью sqlalchemy, если Alembi c уже определила схему? - PullRequest
0 голосов
/ 05 марта 2020

Я использую alembi c для миграции базы данных. И используя sqlalchemy для соединения с базой данных, используя python.
. В alembi c мы определяем схему таблицы как первую версию, а именно ту, которая создает схему.
Например, я дал схему вот так в моей первой версии alembi c.

op.create_table(
        'my_table',
        sa.Column('id', sa.String(10), primary_key=True),
        sa.Column('mail', sa.String(20), unique=True)
)

Теперь давайте перейдем к части sqlalchemy. Внутри моего python проекта у меня есть файл подключения к базе данных, где я создал пользовательскую таблицу, подобную этой.

class CompanyInfo(Base):
    __tablename__ = 'my_table'

    id = Column(String(10), primary_key=False)
    name = Column(String(20), unique=False)

Здесь Alembi c - это первое, что подключается к База данных и создание таблиц. Так какое же значение имеет то, что я указываю значения primary_key, уникального ограничения или nullable = T / F внутри моего python класса?

Мой вопрос касается только ограничений, а не типов данных и их длины.

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Это будет полезно при сериализации данных таблицы и десериализации из объектов.

Например, вы хотите вставить данные в таблицу, вы можете просто создать объект, в котором будут проверяться эти атрибуты, и затем сохранить ит.

company_info = CompanyInfo(id=12,name='ABC')
company_info.save()


def save(self):
    self.add()
    self.commit()
def commit(cls):
    db.session.commit()
0 голосов
/ 05 марта 2020

Во-первых, если вы не будете держать свой код в порядке, это будет кровавый беспорядок. Наличие разной информации в базе данных и в схеме sqlalchemy - действительно плохая идея.

Как только вы начнете использовать ORM, эти вещи будут очень важными. Первичный ключ будет использоваться для идентификации объекта в памяти. Внешний ключ будет использоваться для автоматического выполнения запросов к обеим таблицам. Не уверен насчет уникальности.

Я полагаю, что sqlalchemy будет использовать ограничения внешнего ключа для создания объединения при запросе к связанной таблице.

Опять же, я не совсем уверен в обработке nullable, но я полагаю, что sqlalchemy использует это при установке default value - если обнуляется, он может создать объект, не зная значения по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...