строковый аргумент без кодировки с помощью postgres и sqlalchemy

#python #postgresql #flask-sqlalchemy

#python #postgresql #flask-sqlalchemy

Вопрос:

Я фиксирую объекты в своей базе данных PostgreSQL и пытаюсь запросить ее, выдает ошибку, которую я использую flask-sqlalchemy.

 Traceback (most recent call last):
  File "test_populate_questions.py", line 12, in <module>
    question = question_manager.get(id=1).first()
  File "C:Python38libsite-packagessqlalchemyormquery.py", line 3397, in first
    ret = list(self[0:1])
  File "C:Python38libsite-packagessqlalchemyormquery.py", line 3171, in __getitem__
    return list(res)
  File "C:Python38libsite-packagessqlalchemyormloading.py", line 101, in instances
    cursor.close()
  File "C:Python38libsite-packagessqlalchemyutillanghelpers.py", line 68, in __exit__
    compat.raise_(
  File "C:Python38libsite-packagessqlalchemyutilcompat.py", line 178, in raise_
    raise exception
  File "C:Python38libsite-packagessqlalchemyormloading.py", line 81, in instances
    rows = [proc(row) for row in fetch]
  File "C:Python38libsite-packagessqlalchemyormloading.py", line 81, in <listcomp>
    rows = [proc(row) for row in fetch]
  File "C:Python38libsite-packagessqlalchemyormloading.py", line 580, in _instance
    _populate_full(
  File "C:Python38libsite-packagessqlalchemyormloading.py", line 726, in _populate_full
    dict_[key] = getter(row)
  File "C:Python38libsite-packagessqlalchemysqlsqltypes.py", line 1707, in process
    value = impl_processor(value)
  File "C:Python38libsite-packagessqlalchemysqlsqltypes.py", line 945, in process
    value = bytes(value)
TypeError: string argument without an encoding
  

Я опишу здесь, как это моделируется и как я устанавливаю соединение.

 class Questions(db.Model):
    """ Question model """

    __tablename__ = "questions"

    id = db.Column(db.Integer, primary_key=True)
    question_url = db.Column(db.String(500), nullable=False)
    question_video_url = db.Column(db.String(500), nullable=True)
    category = db.Column(db.String(100), nullable=False)
    topics = db.Column(db.PickleType, nullable=False)
    difficulty = db.Column(db.String(100), nullable=False)
    problem_type = db.Column(db.String(100), nullable=True)
    percentile = db.Column(db.String(100), nullable=False)
    answer = db.Column(db.String(100), nullable=False)
    prompt = db.Column(db.String(1500), nullable=True)
  

Topics — это тип PickleType, который выбирается в виде списка из n значений.
Тогда у меня есть менеджер для другого файла, просто чтобы иметь возможность выполнять итерации по базе данных с помощью кода, и не нужно постоянно отправлять запросы API.
Вот базовый менеджер:

 class BaseManager(ABC):
    """
    Base Manager object.
    Abstract base class to query the backend.
    """

    @abstractproperty
    def _model(self):
        pass

    def __init__(self, db_uri=constants.DB_URI):
        self.engine = create_engine(constants.DB_URI,  client_encoding='utf8')
        self.get_session = sessionmaker(bind=self.engine)

    def get(self, **filters):
        conditions = []
        for attr_name, value in filters.items():
            if value is not None:
                conditions.append(getattr(self._model, attr_name) == value)
        session = self.get_session()
        ret_values = session.query(self._model).filter(*conditions)
        session.close()
        return ret_values

    def add(self, *args, **kwargs):
        obj = self._model(*args, **kwargs)
        session = self.get_session()
        session.add(obj)
        session.commit()
        session.close()
  

Затем, что я на самом деле пытаюсь сделать, это сначала добавить вопрос в таблицу:

 question_manager = QuestionManager()

for question in pd.read_csv('test_questions.csv').to_dict('records'):
    user_manager.add(**question)
  

Чтобы выполнить итерацию по csv для добавления вопросов, я использую pandas и разбираю его на список dicts.

Затем, когда я пытаюсь получить вопрос из таблицы.

 question_manager = QuestionManager()
question = question_manager.get(id=1)
print(question.first()) # Here is where the error mentioned occurs
  

Извините за вставку длинного кода, я попытался предоставить весь контекст сообществу, помогите мне решить эту проблему!
Ребята, вы можете знать, что происходит?

PS: когда я попробовал с простой локальной базой данных, sqlite, это сработало, поэтому я думаю, что это что-то, связанное конкретно с postgres.

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

1. только что отредактировано с полной ошибкой

2. У вас есть пример записи, которая вызывает эту ошибку (то есть, вы можете предоставить образец данных)?