私はsqlalchemyとsqlite dbでフラスコを使用しています。私はいくつかのデータをhtmlから.pyファイルに送る2つのajaxを持っています。SQLite:データベースがロックされています
これらの2つの操作のいずれかを実行するたびに問題が発生し、2つ目の操作はdbのロックのために使用できなくなります。また、最初に選択されたアクションが削除される場合は、その後に選択される操作に関係なく例外が発生します。追加の最初の選択では、機能が似ているので、奇妙な制限なしで追加することができます。
私はタイムアウトを試みましたが、セッションを別の方法で閉じると、結果は常に同じです。ここで
は2つの機能-ハンドラです:
app = Flask(__name__)
csrf = CSRFProtect(app)
app.config.from_object('config')
db = SQLAlchemy(app)
import forms
import models
@app.route('/delete', methods = ['GET', 'POST'])
def delete():
if request.method == "POST":
if request.form['type'] == "delete":
print("delete")
engine = create_engine(SQLALCHEMY_DATABASE_URI)
Session = sessionmaker(bind=engine)
session = Session()
try:
print("try")
requested = request.form['id']
print(requested)
models.Income.query.filter(models.Income.id == requested).delete()
session.commit()
except:
print("rollback")
session.rollback()
finally:
print("fin")
session.close()
ellist = models.Income.query.all()
return render_template("incomeSection.html", list=ellist)
@app.route('/add', methods=['GET', 'POST'])
def add():
if request.method == "POST":
if request.form['type'] == "add":
print('add')
engine = create_engine(SQLALCHEMY_DATABASE_URI)
Session = sessionmaker(bind=engine)
session = Session()
try:
print("try")
newItem = models.Income(name=request.form['name'], tag=request.form['tag'],
account=request.form['account'],
date=date(*(int(i) for i in request.form['date'].split("-"))))
session.add(newItem)
session.commit()
except:
print('rollback')
session.rollback()
finally:
print("fin")
session.close()
ellist = models.Income.query.all()
print(ellist)
return render_template("incomeSection.html", list=ellist)
私はこの例外は、非閉じられた接続によって引き起こされることを読んだが、私は(.closeを持っている)すべてのfinallyブロックで。私は問題がdb = SQLAlchemy(app)
のためにあるかもしれないと思うが、私はそれが事実である場合修正する方法を知らない。私はこの変数を使用して、フォームテンプレートを持つforms.pyの中のdbと、db内のテーブルを定義したmodels.pyに接続します。