Массовая вставка списка словаря

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

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

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

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

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)

См. stackoverflow.com/questions/3659142/…

Ilja Everilä 16.10.2018 21:44
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
457
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

MyTable.__table__

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


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

conn.execute (MedicalPlan .__ tablename __. insert (), list_of_dict) дает мне 'str' object has no attribute 'insert'

themaster 16.10.2018 21:48

Внимательно прочитав ответ и сравнив с тем, что вы только что написали.

Ilja Everilä 16.10.2018 21:51

он работает .. спасибо .. хотел проверить, могу ли я использовать его с объектом сеанса, который я создаю ??

themaster 16.10.2018 21:57

@themaster Да. Session.execute. Хотя вам также может понадобиться грязное обращение ...

Antti Haapala 16.10.2018 21:57

@AnttiHaapala Не могли бы вы сообщить мне, как это сделать с Session.execute?

themaster 21.11.2018 12:47

Другие вопросы по теме