__repr__ метод, закрывающий ошибку потока SQLite - PullRequest
0 голосов
/ 02 октября 2018

Я работаю над веб-приложением, создающим проект через YouTube (Кори Шафер), и частично, когда вводится SQLite, возникает ошибка, когда в классах определяется метод repr .

Это часть кода:

from datetime import datetime
from flask import Flask, render_template, url_for, flash, redirect
from flask_sqlalchemy import SQLAlchemy
...

app = Flask(__name__)
app.config["SECRET_KEY"] = "..."
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///site.db"
db = SQLAlchemy(app)

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
image_file = db.Column(db.String(20), nullable=False, default="default.jpg")
password = db.Column(db.String(60), nullable=False)
posts = db.relationship("Post", backref="author", lazy=True)

def __repr__(self):
    return f"User('{self.username}', '{self.email}', '{self.image_file}')"


class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
date_posted = db.Column(db.DateTime, nullable=False, 
default=datetime.utcnow)
content = db.Column(db.Text, nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False)

def __repr__(self):
    return f"Post('{self.title}', '{self.date_posted}')"

Я могу создавать пользователей и сообщения, и все это сохраняется в базе данных, но при использовании

User.query.all()

it (PyCharm) терпит неудачу и отправляет ошибку:

sqlalchemy.exc.ProgrammingError: (sqlite3.ProgrammingError) SQLite objects created in a thread can only be used in that same thread. The object was created in thread id 6844 and this is thread id 7584. [SQL: 'SELECT user.id AS user_id, user.username AS user_username, user.email AS user_email, user.image_file AS user_image_file, user.password AS user_password \nFROM user'] [parameters: [{}]] (Background on this error at: http://sqlalche.me/e/f405)

Итак, я последовал за ссылкой и выяснил ее repr , которая вызывает проблему в этом случае, поэтому, когда я комментирую этот метод или удаляю егоработает, но дает слабую или очень ограниченную информацию о данных, которые я ищу в базе данных.

Я использую Windows 10, Python 3.7, PyCharm

Я видел где-то, что они использовали без '', как это ивсе то же самое:

def __repr__(self):
    return f"User({self.username}, {self.email}, {self.image_file})"

Что здесь не так?

...