Преобразуйте sql значения столбца запроса в список с помощью sqlalchemy - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть таблица list_test в моей базе данных, которая выглядит следующим образом

ID   ListColumn   CategoryColumn1    CategoryColumn2   CategoryColumn3
1    List1        Meat               Dairy             Bread
2    List2        Fish               Bread             Candy

Я отправляю переменную с именем "currentList" (со значением List1 ) из моего интерфейса через ax ios в мою бэкэнд-функцию load_category_list() Затем я беру переменную "currentList" и отфильтрую строку List1 с моим запросом.

Затем я хочу возьмите эту строку (в данном случае строку 1) и введите значения различных категорий в список.
Т.е. я хочу создать список: category_list = (Мясо, Молочные продукты, Хлеб)

Хотя у меня возникают проблемы при переборе объекта запроса для создания списка категорий.
причина, по которой я хочу это сделать, заключается в том, что я не буду точно знать, сколько столбцов CategoryColumns будет в каждом списке, поэтому я не могу их указать.

Это мой код

Определение класса и сеанс SQLALchemy

class list_class(Base):
    __tablename__ = "list_test"

    id = Column(Integer, primary_key=True)
    list = Column(String)
    foodcategory1 = Column(String)
    foodcategory2 = Column(String)
    foodcategory3 = Column(String)


def  loadsession():
    Base.metadata.create_all(engine)
    #metadata = Base.metadata
    Session = sessionmaker(bind=engine)
    session = Session()
    return session

session = loadsession()

Детальная обработка запроса POST и таблицы фильтрации

@app.route("/load_category_list", methods = ['POST'])
def load_category_list():
    reply_json = request.get_json()
    list_reply = reply_json["currentList"]
    categorylist_query = session.query(list_class).filter(list_class.list == list_reply).all()

Если я запускаю следующий в load_category_list ()

 for var in categorylist_query:
    print(var)

Тогда я получаю <<strong> main .list_class объект в 0x05484970>

Хотя, если я запускаю

category_list = []    
for var in categorylist_query:
   for v in var:
      category_list.append(v)
print(category_list)

Затем я получаю "TypeError: объект list_class 'не повторяется"

Я попытался запустить iter () для объекта и попробовал примеры, указанные здесь https://thispointer.com/python-how-to-make-a-class-iterable-create-iterator-class-for-it/, но Я не могу заставить его работать.

Как мне решить эту проблему?

Спасибо

1 Ответ

0 голосов
/ 09 апреля 2020

Возможно, более простой способ добиться того, что вам нужно, - это использовать SQL ARRAY непосредственно в вашем запросе (если база данных поддерживает его). Это может быть реализовано с помощью sqlalchemy следующим образом:

from sqlalchemy import func

categorylist_query = session.query(
    list_class.list,
    func.array(
        list_class.foodcategory1,
        list_class.foodcategory2,
        list_class.foodcategory3
    ).label('food_categories')
).filter(list_class.list == list_reply)

Это дает дополнительное преимущество передачи нагрузки на базу данных. Позже вы можете итерировать результаты более простым способом.

for var in categorylist_query:
    print(var.list, var.food_categories)

Если нет стороны, вы не можете выполнять итерацию по такой строке, если хотите получить доступ к каждому столбцу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...