我理解了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
. Now, 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
and BOOLEAN
types?
Boolean http://docs.sqlalchemy.org/en/latest/core/type_basics.html#sqlalchemy.types.Boolean is a 泛型 http://docs.sqlalchemy.org/en/latest/core/type_basics.html#generic-types:
泛型类型指定可以读取、写入和存储特定类型的 Python 数据的列。 SQLAlchemy 在发出请求时将选择目标数据库上可用的最佳数据库列类型CREATE TABLE
陈述。
BOOLEAN http://docs.sqlalchemy.org/en/latest/core/type_basics.html#sqlalchemy.types.BOOLEAN is a SQL type http://docs.sqlalchemy.org/en/latest/core/type_basics.html#sql-standard-and-multiple-vendor-types:
此类类型指的是 SQL 标准的一部分或可能在数据库后端的子集中找到的类型。与“通用”类型不同,SQL 标准/多供应商类型具有no保证在所有后端上工作,并且仅在那些通过名称明确支持它们的后端上工作。也就是说,该类型将始终在 DDL 中发出其确切名称CREATE TABLE
已发出。
没有矛盾,因为它们是不同的东西。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)