我正在尝试在SQLAlchemy中创建一个表,其中email列是一组电子邮件地址。但是,我收到了这个错误:
AttributeError: "'module' object has no attribute 'ARRAY'"
我查阅了文档http://docs.sqlalchemy.org/en/latest/core/type_basics.html#sqlalchemy.types.ARRAY
但我想我不明白正确的实施。
import datetime
from sqlalchemy import schema, types
from sqlalchemy import orm
metadata = schema.MetaData()
def now():
return datetime.datetime.now()
page_table = schema.Table('candidate', metadata,
schema.Column('id', types.Integer, schema.Sequence('page_seq_id', optional=True), primary_key=True),
schema.Column('email', types.ARRAY(String), nullable=False),
schema.Column('first', types.Unicode(255), nullable=False),
schema.Column('last', types.Unicode(255), nullable=False),
schema.Column('company', types.Unicode(255), nullable=False),
schema.Column('title', types.Unicode(255), nullable=False),
schema.Column('linkedin', types.Unicode(255), nullable=False, unique=True),
)
class Candidate(object):
pass
orm.mapper(Candidate, page_table)
有人建议如何使这项工作?
答案 0 :(得分:1)
sqlalchemy.types.ARRAY
是1.1.0中的新功能,这是一个尚未发布的版本。除非您使用SQLAlchemy的开发版本,否则您将无法访问该类型。
答案 1 :(得分:1)
我猜你想用它来为用户存储多封电子邮件。如果没有ARRAY
类型,传统上可以通过创建另一个表 - Email
来处理,并使用指向Candidate
表的一对多链接。
email_table = schema.Table('email', metadata,
schema.Column('id', types.Integer, schema.Sequence('email_seq_id', optional=True), primary_key=True),
schema.Column('email', types.Unicode(255), nullable=False),
schema.Column('candidate_id', types.Integer, ForeignKey("candidate.id"), nullable=False),
)
class Email(object):
pass
mapper(Email, email_table)
mapper(Candidate, page_table, properties={
'emails' : relationship(Email, backref='candidate', order_by=email_table.c.id)
})