flask -sqlalchemy не может правильно добавлять / запрашивать данные в базу данных - PullRequest
0 голосов
/ 02 августа 2020

Кажется, я не могу добавить новые данные в базу данных с правильным идентификатором , если я сделаю User.query.all() после добавления и фиксации данных, он вернет мне [None], и если я распечатаю материал в базе данных он даст мне (None, username1, password1, email1, image_file1), где None должен быть user_id.

мой код для модели пользователя:

class User(db.Model, UserMixin):

    __tablename__ = 'user'
    user_id = db.Column(db.Integer, primary_key=True)
    image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    password = db.Column(db.String(60), nullable=False)

    def get_id(self):
           return (self.user_id)

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

мой код для добавления данных:

user = User(username=form.username.data, email=form.email.data, password=hashed_password)
db.session.add(user)
db.session.commit()

а здесь db - это AWS RDS:

db_url = 'mysql+mysqldb://' + user + ':' + passw + '@' + host + ':3306/' + database

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = db_url

db = SQLAlchemy(app)

в базе данных есть две таблицы с именами «user» и «news».

1 Ответ

0 голосов
/ 02 августа 2020

Вы не присваиваете значение user_id. Вы можете исправить это либо с помощью автоинкремента user_id, то есть измените определение user_id на:

user_id = db.Column(db.Integer, primary_key=True, auto_increment=True)

Или вы можете присвоить определенное значение c при добавлении строки:

user = User(user_id=1, username=form.username.data, email=form.email.data, password=hashed_password)

Я бы предпочел первый вариант, если у вас нет веской причины назначать user_id вручную.

...