SQLAlchemy布尔值与BOOLEAN

时间:2018-06-25 18:24:46

标签: sqlalchemy

我可以看到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,还是我缺少什么?从概念上讲,BooleanBOOLEAN类型之间有什么区别?

1 个答案:

答案 0 :(得分:5)

Booleangeneric type

  

泛型类型指定一列,该列可以读取,写入和存储特定类型的Python数据。发出CREATE TABLE语句时,SQLAlchemy将选择目标数据库上可用的最佳数据库列类型。

BOOLEANSQL type

  

这种类型的类别指的是SQL标准的一部分,或者可能在数据库后端子集中找到的类型。与“通用”类型不同,SQL标准/多供应商类型不能保证在所有后端上都可以正常运行,只能在按名称明确支持它们的那些后端上工作。也就是说,在发出CREATE TABLE的情况下,该类型将始终在DDL中发出其确切名称。

没有矛盾,因为它们是不同的东西。