#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. У вас есть пример записи, которая вызывает эту ошибку (то есть, вы можете предоставить образец данных)?