Ошибка MySQLInterfaceError при фиксации в SQLAlchemy

#python #flask #sqlalchemy

Вопрос:

Я создаю веб-API с помощью Flask с помощью SQLAlchemy для передачи данных в базу данных MySQL. Всякий раз, когда я добавляю объект «Проект» в сеанс и фиксирую его, я получаю следующую ошибку:

результат[ключ] = self._cmysql.convert_to_mysql(значение)[0] _mysql_коннектор.Ошибка MySQLInterfaceError: кортеж типа Python не может быть преобразован

Класс, который я пытаюсь совершить:

 class Project(Base): __tablename__ = 'project'  id = Column(Integer, primary_key=True, autoincrement=True) title = Column(String(255), unique=True, nullable=False) client = Column(String(255), unique=False, nullable=False) work_week = Column(Integer, unique=False, nullable=False) start_date = Column(Date, unique=False, nullable=False) end_date = Column(Date, unique=False, nullable=True) description = Column(String(255), unique=False, nullable=True)  def __init__(self, title, client, work_week, start_date, end_date, description):  self.title = title  self.client = client  self.work_week = work_week  self.start_date = start_date,  self.end_date = end_date,  self.description = description  

Схема зефира для (де)сериализации вышеуказанного класса:

 class ProjectSchema(Schema):  id = fields.Integer()  title = fields.Str()  client = fields.Str()  work_week = fields.Integer()  start_date = fields.Date()  end_date = fields.Date()  description = fields.Str()  

И, наконец, метод, который генерирует ошибку со значениями во время выполнения:

 def post_project(project: str): '{"title":"Project X","client":"Klant X","work_week":40,"start_date":"2021-11-08","end_date":"2021-11-15","description":"Dit is een voorbeeld."}' schema = ProjectSchema() schema: lt;ProjectSchema(many=False)gt; project_data = schema.loads(project) {'end_date': datetime.date(2021, 11, 15), 'start_date': datetime.date(2021, 11, 8), 'description': 'Dit is een voorbeeld.', 'title': 'Project X', 'client': 'Klant X', 'work_week': 40} result = Project(**project_data) lt;api.models.project.Project object at 0x0000023271C0B640gt;  session.add(result) session.commit() lt;-- ERROR  return '', 200  

Я не понимаю, почему он жалуется на кортеж, который не может быть преобразован. Может ли кто-нибудь пролить свет на этот вопрос?

Спасибо.

Ответ №1:

В вашем Project.__init__ , у вас есть

 ...  self.start_date = start_date,  self.end_date = end_date,  ...  

Обратите внимание на запятые в конце строк, которые превращают эти значения в кортежи.

Нужно ли вообще __init__ такое переосмысление? Один из Base них уже должен назначить кварги соответствующим участникам, так что, возможно, вам лучше всего решить свою проблему, полностью удалив этот метод…

Комментарии:

1. Я не знал о запятых, но их удаление решило проблему. Мне потребуется некоторое время, чтобы заново изучить, как на самом деле работает Python. Спасибо!