Как можно использовать SQLAlchemy в Python для заполнения таблицы в базе данных через SQL?

Как заполнить таблицу SQL на Python с использованием SQLAlchemy? Я добавляю данные, но они не появляются в базе данных. Код добавления данных не вызывает ошибок, но данные не сохраняются. 

Вот код, который я использую для создания таблицы:

```python
import sqlalchemy as db

engine = db.create_engine('sqlite:///my_account_statement.db')
conn = engine.connect()
metadata = db.MetaData()

payment = db.Table('Payment', metadata,
                   db.Column('id', db.Integer, primary_key=True),
                   db.Column('name', db.Text),
                   db.Column('date', db.Text),
                   db.Column('time', db.Text),
                   db.Column('amount', db.Text),
                   db.Column('account_number', db.Text),
                  )

payment.create(engine)
conn.close()
```

А вот код, которым я добавляю данные:

```python
import sqlalchemy as db

engine = db.create_engine('sqlite:///my_account_statement.db')
conn = engine.connect()
metadata = db.MetaData()

payment = db.Table('Payment', metadata, autoload_with=engine)

values_to_insert = [
    {'name': 'Быков Василий Геннадьевич', 'date': '2018-06-15', 'time': '15:39:08.885+03:00', 'amount': '1000.00', 'account_number': '144945576'},
    {'name': 'Курёзин Петр Михайлович', 'date': '2018-06-15', 'time': '12:39:08.885+03:00', 'amount': '2000.00', 'account_number': '144942346'}
]

insertion_query = payment.insert().values(values_to_insert)
conn.execute(insertion_query)
```

Что я делаю не так? Почему данные не сохраняются в базе данных?
  • 7 декабря 2023 г. 12:19
Ответы на вопрос 2
Проблема в том, что вы не вызываете метод `commit()` для сохранения изменений в базе данных. По умолчанию SQLAlchemy использует автоматический режим транзакций, который требует явного подтверждения изменений.

Добавьте `conn.commit()` после вызова `conn.execute(insertion_query)`, чтобы сохранить изменения в базе данных:

```python
import sqlalchemy as db

# Создание таблицы и подключение к базе данных

engine = db.create_engine('sqlite:///my_account_statement.db')
conn = engine.connect()
metadata = db.MetaData()

payment = db.Table('Payment', metadata, autoload_with=engine)

# Добавление данных

values_to_insert = [
    {'name': 'Быков Василий Геннадьевич', 'date': '2018-06-15', 'time': '15:39:08.885+03:00', 'amount': '1000.00', 'account_number': '144945576'},
    {'name': 'Курёзин Петр Михайлович', 'date': '2018-06-15', 'time': '12:39:08.885+03:00', 'amount': '2000.00', 'account_number': '144942346'}
]

insertion_query = payment.insert().values(values_to_insert)
conn.execute(insertion_query)

# Сохранение изменений

conn.commit()
conn.close()
```

Теперь данные должны сохраняться в базе данных после выполнения `conn.commit()`.
conn.commit()?
Похожие вопросы