SQLalchemy: alembic bulk_insert() 失败

5

在你标记这个问题为重复之前:

我确实看过这个问题/答案,并且按照它的建议去做了,但是当我添加这段代码时:

permslookup = sa.Table('permslookup',
    sa.Column('perms_lookup_id', primary_key=True),
    sa.Column('name', sa.Unicode(40), index=True),
    sa.Column('description', sa.Text),
    sa.Column('value', sa.Numeric(10, 2)),
    sa.Column('ttype', sa.PickleType(), index=True),
    sa.Column('permission', sa.Unicode(40), index=True),
    sa.Column('options', sa.PickleType())
    )

当我运行alembic upgrade head时,出现以下错误:
AttributeError: Neither 'Column' object nor 'Comparator' object has an attribute 'schema'

当我检查完整的堆栈跟踪时,我注意到这是导致错误的原因:
sa.Column('options', sa.PickleType())

这是以上代码的最后一行...我该怎么解决?我不知道如何解决它...非常感谢任何帮助。
这是我想要插入的数据:
op.bulk_insert('permslookup',
    [
        {
            'id': 1,
            'name': 'accounts',
            'description': """ Have permission to do all transactions """,
            'value': 1,
            'ttype': ['cash', 'loan', 'mgmt', 'deposit', 'adjustments'],
            'permission': 'accounts',
            'options': None
        },
        {
            'id': 2,
            'name': 'agent_manage',
            'description': """ Have permission to do cash, cash, loan and Management Discretion transactions """,
            'value': 2,
            'ttype': ['cash', 'loan', 'mgmt'],
            'permission': 'agent_manage',
            'options': None
        },
        {
            'id': 3,
            'name': 'corrections',
            'description': """ Have permission to do cash, loan and adjustments transactions """,
            'value': 3,
            'ttype': ['cash', 'loan', 'adjustments'],
            'permission': 'corrections',
            'options': None
        },
        {
            'id': 4,
            'name': 'cashup',
            'description': """ Have permission to do cash and loan transactions """,
            'value': 4,
            'ttype': ['cash', 'loan'],
            'permission': 'cashup',
            'options': None
        },

    ]
)

当我尝试运行bulk_insert时,我遇到的原始错误是:
AttributeError: 'str' object has no attribute '_autoincrement_column'
2个回答

11

对于错误#1,信息不足。需要一个堆栈跟踪。

对于#2,bulk_insert()接收表对象作为参数,而不是字符串名称。

请参见http://alembic.readthedocs.org/en/latest/ops.html#alembic.operations.Operations.bulk_insert

from alembic import op
from datetime import date
from sqlalchemy.sql import table, column
from sqlalchemy import String, Integer, Date

# Create an ad-hoc table to use for the insert statement.
accounts_table = table('account',
    column('id', Integer),
    column('name', String),
    column('create_date', Date)
)

op.bulk_insert(accounts_table,
    [
        {'id':1, 'name':'John Smith',
                'create_date':date(2010, 10, 5)},
        {'id':2, 'name':'Ed Williams',
                'create_date':date(2007, 5, 27)},
        {'id':3, 'name':'Wendy Jones',
                'create_date':date(2008, 8, 15)},
    ]
)

当我创建了一个表的对象时,它起作用了。谢谢 :) - Renier

0

如果出现第一个错误,请使用以下代码替换 sa.Tablesa.Column

from sqlalchemy.sql import table, column


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接