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')
Где что-то пошло не так .