【问题标题】:SQLalchemy: alembic bulk_insert() failsSQLalchemy:alembic bulk_insert() 失败
【发布时间】:2014-05-28 14:22:53
【问题描述】:

在将其标记为重复之前:

我确实看过这个question/answer,我确实按照它的建议做了,但是当我添加这个代码时:

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'

【问题讨论】:

    标签: python mysql sqlalchemy alembic


    【解决方案1】:

    对于错误 #1,没有足够的信息。需要堆栈跟踪。

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

    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)},
        ]
    )
    

    【讨论】:

    • 当我创建表的对象时,它起作用了。谢谢:)
    【解决方案2】:

    对于第一个错误开关 sa.Tablesa.Column

    from sqlalchemy.sql import table, column

    【讨论】:

      猜你喜欢
      • 2013-03-21
      • 1970-01-01
      • 2016-12-30
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-20
      • 2016-01-22
      相关资源
      最近更新 更多