Я пытаюсь понять, как вставить много (порядка 100k) записей в db, используя sqlalchemy в python3. Все указывает на использование транзакций, однако я немного смущен относительно того, как это делается. На некоторых страницах указано, что вы получаете транзакцию из connection.begin(), другие места говорят, что это session.begin(), и эта страница here говорит, что это session.create_transaction(), которой не существует.Сделки и sqlalchemy
Вот что я пытаюсь сделать:
def addToTable(listOfRows):
engine = create_engine('postgresql+pypostgresql:///%s' % db,echo = False)
Session = sessionmaker(bind = engine)
session = Session()
table = myTable(engine,session)
for row in listOfRows:
table.add(row)
table.flush() ### ideally there would be a counter and you flush after a couple of thousand records
class myTable:
def __init__(self,engine,session):
self.engine = engine
self.session = session
self.transaction =createTransaction()# Create transaction code here
def add(self,row):
newRow = tableRow(row) ## This just creates a representation of a row in the DB
self.transaction.add(newRow)
self.transaction.flush()
def flush(self):
self.transaction.commit()
Это странно. Почему у вас есть класс myTable, и где ваши модели? –
Извините, меня отняли, так как я не хотел загромождать его большим количеством кода, так как основной проблемой является транзакция. Класс myTable представляет собой просто представление таблицы в базе данных и вызывает класс tableRow, который расширяет sqlalchemy.ext.declarative.declarative_base. Что вы подразумеваете под моделями? – Lezan