Flask -Sqlalchemy не может зафиксировать изменения в базе данных - PullRequest
1 голос
/ 18 июня 2020
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __init__(self,username,email):
        self.username=username
        self.email=email

    def __repr__(self):
        return '<User %r>' % self.username

Это код, который я скопировал из официальной документации моего приложения для заметок. Я сделал именно то, что сказано в руководстве по быстрому запуску в документации, но когда я пытаюсь зафиксировать сеанс в терминале, это просто не происходит, он не вызывает ошибку, но сеанс не фиксируется, когда я вызываю db.session.commit(), и поэтому я не могу вставить в базу данных или внести какие-либо изменения, но я могу запросить результаты из базы данных с помощью обычной команды.

Это то, что я сделал в терминале.

>>> from database import db
/home/ajith/.local/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py:835:
 FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead
 and will be disabled by default in the future.  Set it to True or False to supp
ress this warning.
  'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '
>>> db.create_all()
>>> from database import User
>>> User
<class 'database.User'>
>>> db
<SQLAlchemy engine=sqlite:////home/ajith/Desktop/sql/test.db>
>>> db.session
<sqlalchemy.orm.scoping.scoped_session object at 0x7fc41ef03320>
>>> admin = User(username='admin', email='admin@example.com')
>>> >>> guest = User(username='guest', email='guest@example.com')
  File "<input>", line 1
    >>> guest = User(username='guest', email='guest@example.com')
     ^
SyntaxError: invalid syntax
>>> guest = User(username='guest', email='guest@example.com')
>>> db.session.add(admin)
>>> db.session.add(guest)
>>> guest
<User 'guest'>
>>> admin
<User 'admin'>
>>> db.session.commit()
>>> User.query.all()
[]
>>> db.session.add(guest)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
    db.session.add(guest)
  File "/home/ajith/.local/lib/python3.6/site-packages/sqlalchemy/orm/scoping.py
", line 162, in do
    return getattr(self.registry(), name)(*args, **kwargs)
  File "/home/ajith/.local/lib/python3.6/site-packages/sqlalchemy/orm/session.py
", line 1959, in add
    self._save_or_update_state(state)
  File "/home/ajith/.local/lib/python3.6/site-packages/sqlalchemy/orm/session.py
", line 1972, in _save_or_update_state
    self._save_or_update_impl(state)
  File "/home/ajith/.local/lib/python3.6/site-packages/sqlalchemy/orm/session.py
", line 2320, in _save_or_update_impl
    self._save_impl(state)
  File "/home/ajith/.local/lib/python3.6/site-packages/sqlalchemy/orm/session.py
", line 2273, in _save_impl
    to_attach = self._before_attach(state, obj)
  File "/home/ajith/.local/lib/python3.6/site-packages/sqlalchemy/orm/session.py
", line 2393, in _before_attach
    % (state_str(state), state.session_id, self.hash_key)
sqlalchemy.exc.InvalidRequestError: Object '<User at 0x7fc41eede908>' is already
 attached to session '2' (this is '6')

Где что-то пошло не так .

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