SQLAlchemy Boolean vs BOOLEAN - PullRequest
       3

SQLAlchemy Boolean vs BOOLEAN

0 голосов
/ 25 июня 2018

Я вижу, что BOOLEAN переопределяет __visit_name__

class BOOLEAN(Boolean):
    __visit_name__ = 'BOOLEAN'

, который контролирует метод посетителя, выбранный диспетчером

def _compiler_dispatch(self, visitor, **kw):
    visit_attr = 'visit_%s' % self.__visit_name__
    try:
        meth = getattr(visitor, visit_attr)

В случае MS SQL, посетительMSSQLCompiler, что происходит от GenericTypeCompiler.Теперь MSSQLCompiler переопределяет visit_boolean:

def visit_boolean(self, type_, **kw):
    return self.visit_BIT(type_)

Но оно не переопределяет visit_BOOLEAN, поэтому тип столбца Boolean разрешается в "BIT", а BOOLEAN (через суперкласс) -в "BOOLEAN", который не является допустимым типом MS SQL.

Почему это несоответствие?MSSQLCompiler нужно переопределить visit_BOOLEAN, или мне чего-то не хватает?В чем принципиальная разница между типами Boolean и BOOLEAN?

1 Ответ

0 голосов
/ 25 июня 2018

Boolean - это универсальный тип :

Универсальные типы задают столбец, который может читать, записывать и хранить определенный тип данных Python. SQLAlchemy выберет лучший тип столбца базы данных, доступный в целевой базе данных, при выдаче оператора CREATE TABLE.

BOOLEAN - это тип SQL :

Эта категория типов относится к типам, которые являются либо частью стандарта SQL, либо потенциально находятся в подмножестве серверных баз данных. В отличие от «универсальных» типов, стандартные и мультивендорные типы SQL имеют гарантию no на работу со всеми бэкэндами и будут работать только с теми бэкэндами, которые явно поддерживают их по имени. Таким образом, тип всегда будет выдавать свое точное имя в DDL, когда выдается CREATE TABLE.

Нет противоречий, потому что это разные вещи.

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