update tutorial query example español create python postgresql sqlalchemy alembic

python - tutorial - sqlalchemy: la inserción masiva del alambique falla: el objeto ''str'' no tiene ningún atributo ''_autoincrement_column''



sqlalchemy tutorial español (1)

Mi modelo se ve como

class Category(UserMixin, db.Model): __tablename__ = ''categories'' uuid = Column(''uuid'', GUID(), default=uuid.uuid4, primary_key=True, unique=True) name = Column(''name'', String, nullable=False) parent = Column(''parent'', String, nullable=False) created_on = Column(''created_on'', sa.types.DateTime(timezone=True), default=datetime.utcnow()) __table_args__ = (UniqueConstraint(''name'', ''parent''),) def __init__(self, name, parent): self.name = name self.parent = parent def __repr__(self): return ''<Category:%s:%s:%s>'' % ( self.uuid, self.name, self.category_type)

donde GUID es sqlalchemy personalizado tipo I crea la tabla usando alembic --autogenerate

op.create_table(''categories'', sa.Column(''uuid'', UUID(), nullable=False), sa.Column(''name'', sa.String(), nullable=False), sa.Column(''parent'', sa.String(), nullable=False), sa.Column(''created_on'', sa.DateTime(timezone=True), nullable=True), sa.PrimaryKeyConstraint(''uuid''), sa.UniqueConstraint(''name'', ''parent''), sa.UniqueConstraint(''uuid'') )

y tabla PostgreSQL como

Table "public.categories" Column | Type | Modifiers ------------+--------------------------+----------- uuid | uuid | not null name | character varying | not null parent | character varying | not null created_on | timestamp with time zone | Indexes: "categories_pkey" PRIMARY KEY, btree (uuid) "categories_name_parent_key" UNIQUE CONSTRAINT, btree (name, parent)

Intento ejecutar la revisión y actualizar el db como

def upgrade(): op.bulk_insert(''categories'', [ {''name'': ''first'', ''parent'': ''first_parent''}, {''name'': ''second'', ''parent'': ''second_parent''} ] )

cuando ejecuto la alembic upgrade head , veo error como

File "/Users/me/.virtualenvs/envs/project/lib/python2.7/site-packages/alembic/environment.py", line 494, in run_migrations self.get_context().run_migrations(**kw) File "/Users/me/.virtualenvs/envs/project/lib/python2.7/site-packages/alembic/migration.py", line 211, in run_migrations change(**kw) File "alembic/versions/491d4f91e0bc_generate_categories_.py", line 21, in upgrade {''name'': ''second'', ''parent'': ''second_parent''} File "<string>", line 7, in bulk_insert File "/Users/me/.virtualenvs/envs/project/lib/python2.7/site-packages/alembic/operations.py", line 710, in bulk_insert self.impl.bulk_insert(table, rows) File "/Users/me/.virtualenvs/envs/project/lib/python2.7/site-packages/alembic/ddl/impl.py", line 179, in bulk_insert table._autoincrement_column = None AttributeError: ''str'' object has no attribute ''_autoincrement_column''

¿Qué es lo que estoy haciendo mal aquí?


todo lo que tuve que hacer es crear una table antes de bulk_insert, incluso si tengo un esquema explícito en models.py separados

import sqlalchemy as sa from sqlalchemy.sql import table from alembic import op def upgrade(): categories = table(''categories'', sa.Column(''uuid'', UUID(), primary_key=True, unique=True, autoincrement=False), sa.Column(''name'', String), sa.Column(''parent'', String), sa.Column(''created_on'', sa.types.DateTime(timezone=True), default=datetime.utcnow()) ) op.bulk_insert(categories, [ {''name'': ''first'', ''parent'': ''first_parent''}, {''name'': ''second'', ''parent'': ''second_parent''} ] )

y luego pude ejecutar el alembic upgrade head sin problemas y los datos se serializaron con éxito en la base de datos.