#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. Из моего исследования следует, что более стандартные способы создают отношения «многие ко многим». Но в данном случае я предпочитаю создавать три столбца для каждого хобби, как вы, так как в нем всего три поля.