Frage

Bevor Sie dies als Duplikat kennzeichnen:

Ich habe mir das angesehen frage/antwort, und ich habe getan, was es vorschlägt, aber wenn ich diesen Code hinzufüge:

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())
    )

und dann renne alembic upgrade head, Ich bekomme die folgende Fehlermeldung:

AttributeError: Neither 'Column' object nor 'Comparator' object has an attribute 'schema'

Wenn ich den vollständigen Stack-Trace untersuche, stelle ich fest, dass dies den Fehler verursacht:

sa.Column('options', sa.PickleType())

Dies ist die letzte Zeile des obigen Codes...Wie kann ich das lösen?Ich habe keine Ahnung, wie ich es lösen soll...Hilfe jeglicher Art wäre dankbar.

Hier sind die Daten, die ich einfügen möchte:

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

    ]
)

Der ursprüngliche Fehler, den ich bekomme, wenn ich versuche, das auszuführen bulk_insert is:

AttributeError: 'str' object has no attribute '_autoincrement_column'
War es hilfreich?

Lösung

Für Fehler # 1 nicht genügend Informationen.Benötigen Sie einen Stack-Trace.

Für # 2 empfängt bulk_insert() das Tabellenobjekt, keinen String-Namen, als Argument.

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

Andere Tipps

Für ersten Fehlerschalter sa.Table und sa.Column mit:

from sqlalchemy.sql import table, column

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top