Добавление нескольких столбцов в таблицу, например, с помощью цикла for / while в flask-sqlalchemy

#python #sqlalchemy #flask-sqlalchemy

Вопрос:

Я хочу создать дочернюю таблицу с помощью Flask-SQLAlchemy, которая содержит около 600 столбцов.
Каждый столбец должен быть другим хобби с логическим значением true или false (независимо от того, есть ли у него это хобби или нет).
Однако у меня есть проблема. Использование модели Flask-SQLAlchemy для ее создания кажется проблематичным, так как мне придется писать каждое поле самостоятельно.
т. е.:

 class hobbies(database.Model):
   id = db.Column(db.Integer, primary_key=True)
   user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
   hobby1 = db.Column(db.Boolean)
   hobby2 = db.Column(db.Boolean)
   hobby3 = db.Column(db.Boolean)
   ....
   ....
   hobby600 = db.Column(db.Boolean)
 

(база данных обозначает переменную, которая содержит — база данных = SQLAlchemy(приложение))

Есть ли способ, например, с помощью цикла for или while, добавить все столбцы в таблицу?

Спасибо, что уделили мне время.

Ответ №1:

Это плохой дизайн таблицы(без обид), вместо этого вы можете создать таблицу, как показано ниже

 class Hobbies(database.Model):
   id = db.Column(db.Integer, primary_key=True)
   hobby = db.Column(db.String(50))

class UserHobbies(database.Model):
   user_id = db.Column(db.Integer, db.ForeignKey('user.id'),primary_key=True)
   hobbie_id = db.Column(db.Integer, db.ForeignKey('hobbies.id'),primary_key=True)
 

Вместо того, чтобы создавать 600 столбцов в таблице увлечений, просто создайте 600 строк и создайте еще одну таблицу пользователей для многих-многих отношений с пользователями и увлечениями.
Вы также можете использовать bulk_insert_mappings(ModelName,list_data) функцию для вставки массовых данных в таблицу хобби.

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

1. У меня есть связанный с этим вопрос, касающийся многих-многих отношений, таких как ваше решение. Если у меня есть что-то похожее, я хочу сохранить на человека, а также сравнить пользователей, например, если они любят баскетбол, футбол и хоккей (3 логических набора). Лучше ли создавать отношения «многие ко многим», как в вашем решении, или, поскольку это всего 3 поля, я могу просто добавить их в качестве столбцов в пользовательскую таблицу?

2. Из моего исследования следует, что более стандартные способы создают отношения «многие ко многим». Но в данном случае я предпочитаю создавать три столбца для каждого хобби, как вы, так как в нем всего три поля.