Моя первая попытка с ORM, попытка понять, как она работает, но с небольшим испытанием:
То, что я пытаюсь сделать, это вставить JSON из API в модель SQLAlchemy, а затем массово вставить все записи в мою базу данных. Но по какой-то причине я получаю сообщение об ошибке в SQLAlchemy.
Из того, что я понимаю об ошибке, в какой-то момент времени при назначении данных моей модели они преобразуются в диктовку, когда я подумал, что это должен быть список class objects
.
Мой ожидаемый результат - успешная вставка всех записей. Кто-нибудь может помочь понять, что я могу делать неправильно?
Цените. *
Ошибка
sqlalchemy.exc.ProgrammingError:
(mysql.connector.errors.ProgrammingError)
Failed processing pyformat-parameters;
Python 'dict' cannot be converted to a MySQL type
JSON:
{
"all_orders": [
{
"id": 456215587,
"created_at": "2018-11-04T23:18:18-02:00",
"order_number": null,
},
{
"id": null,
"created_at": "2018-11-04T23:18:18-02:00",
"order_number": 1982,
}]
}
Функция
def update_orders(all_orders):
cursor = db_cursor()
session = db_session()
orders_entries = []
for orders in all_orders:
order_id = orders.get("id", {})
order_number = orders.get("order_number", {})
created_at = orders.get("created_at", {})
new_entry = SalesOrders(order_id=order_id,
order_number=order_number,
created_at=created_at)
orders_entries.append(new_entry)
session.add_all(orders_entries)
session.commit()
Модель
class SalesOrders(db.Model):
__tablename__ = 'sales_orders'
id = Column(Integer, nullable=False, index=True)
order_id = Column(String(50), primary_key=True, server_default=text("''"))
order_number = Column(String(50))
created_at = Column(String(100))
РЕДАКТИРОВАТЬ, чтобы сделать его проверяемым.
Функция .get () создавала словарь вместо None
объекта, и SQLAlchemy не смог вставить словарь Python.