我的课程定义如下
class RelationshipType(Type):
__tablename__ = "relationship_type"
__sequencename__ = "rel_type_seq"
当我将子类定义为
时File "/home/vagrant/env/flask_files_api/local/lib/python2.7/site-packages/sqlalchemy/sql/compiler.py", line 2880, in _requires_quotes
lc_value = value.lower()
AttributeError: 'NoneType' object has no attribute 'lower'`
我收到错误。
__sequencename__
如何让父类使用子类中定义的project/
├── old-architecture/ <-- PEAR Code style
└── new-architecture/ <-- PSR 1 and PSR 2 code style
?我需要序列名称,因为我在子类
答案 0 :(得分:2)
你要找的是@declared_attr
装饰者:
from sqlalchemy.ext.declarative import declared_attr
class Type(Base):
...
@declared_attr
def id(cls):
return Column(SmallInteger,
Sequence(cls.__sequencename__),
primary_key=True)
这样,您可以将列的实际创建推迟到定义子类时:
@declared_attr
将属性转换为类似于标量的属性,可以从未实例化的类中调用。声明性将特定标记为@declared_attr
的属性视为返回特定于映射或声明性表配置的构造。属性的名称是属性的非动态版本的名称。
现在,如果不是using Oracle,手动定义序列对我的理解大多是不必要的。您只需将autoincrement=True
添加到主键列,或将其保留在default value of "auto"
:
默认值是字符串
"auto"
,表示没有声明客户端或python端默认值的INTEGER类型的单列主键应自动接收自动增量语义