Как создать экземпляр объекта таблицы для массовых вставок строк, используя alembic / SQLAlchemy - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь использовать bulk_insert для вставки данных в существующую таблицу (services) в моей базе данных Postgres.Как мне создать экземпляр этого табличного объекта, чтобы я мог сделать с ним массовую вставку?

Я видел такие ответы: Alembic bulk_insert в таблицу со схемой , но я хочу избежать повторного определения схемы в процессе миграции.

from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql


def upgrade():
    """Up migration."""


services = sa.MetaData().Services()

op.bulk_insert(services,
    [   
        {
        'id': 88,
        'name':'Test 1',
        'is_active': 'true',
        'include_in_broker_fee': 'true',
        'is_domestic': 'true',
        'is_international': 'true'
        },
        {
        'id': 89,
        'name':'Test 2',
        'is_active': 'true',
        'include_in_broker_fee': 'true',
        'is_domestic': 'true',
        'is_international': 'true'
        }
   ])

Ответы [ 2 ]

0 голосов
/ 22 августа 2019

В случае, если кто-то наткнется на это, как я: в настоящее время, чтобы это работало, вам нужно отразить определенные таблицы в вашем объекте MetaData ().Базовая база данных была MySQL.

Рабочий код:

from alembic import op
from sqlalchemy import Table, MetaData

def upgrade():

    # get metadata from current connection
    meta = MetaData(bind=op.get_bind())

    # pass in tuple with tables we want to reflect, otherwise whole database will get reflected
    meta.reflect(only=('some_table',))

    # define table representation
    some_table_tbl = Table('some_table', meta)

    # insert records
    op.bulk_insert(
        some_table_tbl,
        [
            {
                # data here...
            },  # (...)
        ]
0 голосов
/ 31 мая 2018

Чтобы обновить таблицу, как показано выше, вам нужно определить ее, чтобы sqlalchemy знал, что обновлять.Делать это с объектом MetaData () алхимика довольно просто, на самом деле у вас это почти есть.Попробуйте что-то вроде этого:

    from sqlalchemy import Table, MetaData

    meta = MetaData(bind=op.get_bind())
    services = Table('services', meta)

Теперь, когда таблица определена, вы можете использовать методы массового обновления алхимии.Для этого я отсылаю вас к этой части их документации, где они показывают несколько примеров bulk_insert_mappings () и bulk_save_objects () --- http://docs.sqlalchemy.org/en/latest/faq/performance.html

...