AttributeError:“'module'对象没有属性'ARRAY'”

时间:2016-04-29 16:57:33

标签: python

我正在尝试在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)

有人建议如何使这项工作?

2 个答案:

答案 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)
})