Массовая вставка списка словарей - PullRequest
0 голосов
/ 16 октября 2018

Я определил свой класс модели, как показано ниже:

class MedicalPlan(Base):
    __tablename__ = "medical_plans"

    id = Column(Integer, nullable=False , primary_key=True)
    issuer_id = Column(Integer, ForeignKey('issuers.id'), nullable=False)
    service_area_id = Column(Integer).... and so 

Я создал сеанс, используя приведенный ниже код, с помощью которого я выполняю большинство моих операций sql:

def get_session():
    engine = create_engine('postgresql+psycopg2://postgres:postgres@localhost/db')
    Session = sessionmaker(engine)
    return Session()

Iу меня есть список словаря, который я хочу вставить как массовую вставку.

В документации , я могу видеть, куда можно вставить, используя что-то вроде ниже:

connection.execute(table.insert(), [ 
        {'id':'12','name':'a','lang':'eng'},
        {'id':'13','name':'b','lang':'eng'},
        {'id':'14','name':'c','lang':'eng'},
    ]
)

Мой вопрос заключается в том, как я могу выполнить такую ​​операцию, используя класс моей модели так, как я представил сопоставление.

Что-то вроде этого не работает:

conn.execute(MedicalPlans.insert(), list_of_dict)

1 Ответ

0 голосов
/ 16 октября 2018

Таблица сопоставленного класса должна быть доступна как

MyTable.__table__

, следовательно, MedicalPlan.__table__.insert() должно работать.


В этом вопросе есть и другие варианты, связанные с Ильей,но большинство не так эффективно - bulk_insert_mappings приблизится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...