GithubHelp home page GithubHelp logo

blakev / flask-whooshalchemy3 Goto Github PK

View Code? Open in Web Editor NEW
29.0 4.0 7.0 37 KB

Whoosh indexing capabilities for Flask-SQLAlchemy, Python 3 compatibility fork.

License: MIT License

Python 100.00%

flask-whooshalchemy3's Introduction

Flask-WhooshAlchemy3

PyPI version license

Whoosh indexing capabilities for Flask-SQLAlchemy, Python 3 compatibility fork. Performance improvements and suggestions are readily welcome.

Inspired from gyllstromk's Flask-WhooshAlchemy.

Install

$ pip install flask-whooshalchemy3

..alternatively from source,

$ pip install git+git://github.com/blakev/Flask-WhooshAlchemy3.git@master

Quickstart

from datetime import datetime

import flask_sqlalchemy
import flask_whooshalchemy3
from whoosh.analysis import StemmingAnalyzer

db = flask_sqlalchemy.SQLAlchemy()


class BlogPost(db.Model):
    __tablename__ = 'posts'
    __searchable__ = ['title', 'content', 'summary']  # indexed fields
    __analyzer__ = StemmingAnalyzer()

    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(255), unique=True)
    content = db.Column(db.Text(32 * 1024))
    summary = db.Column(db.String(1024))
    created = db.Column(db.DateTime, default=datetime.utcnow)

Committing model instances to the session will write or update the Whoosh index.

db.session.add(BlogPost(title='First Post!', content='This is awesome.'))
db.session.commit()

Searching is done via Model.query.search(..). However, the request must be done within the Flask request context otherwise the database connection may not be established.

@app.route('/posts')
def posts():
    num_posts = min(request.args.get('limit', 10), 50)
    query = request.args.get('q', '')
    results = BlogPost.query.search(query, limit=num_posts)

Results are ordered by Whoosh's ranking-algorithm, but can be overwritten with SQLAlchemy .order_by.

yesterday = datetime.utcnow() - timedelta(days=1)
results = BlogPost.query
            .filter(BlogPost.created > yesterday)
            .search('first')
            .order_by(desc(BlogPost.created))

Flask Configuration

WHOOSH_ANALYZER (whoosh.Analyzer)

WHOOSH_INDEX_PATH (str)

  • File path to where the text indexes will be saved.
  • Default: {cwd}/.indexes/*

WHOOSH_INDEXING_CPUS (int)

  • The number of system processes to spawn for indexing new and modified documents.
  • Default: 2

WHOOSH_INDEXING_RAM (int)

  • The amount of RAM, in megabytes, to reserve per indexing process for data processing.
  • Default: 256

WHOOSH_RAM_CACHE (bool)

  • Allows common queries and their fields to be stored in cache, in RAM.
  • Default: False

License

MIT License

Copyright (c) 2017 Blake VandeMerwe

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

flask-whooshalchemy3's People

Contributors

blakev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

flask-whooshalchemy3's Issues

AttributeError: 'result' object has no attribute 'id'

When searching, no error is thrown if the search does not produce result, but when results are available, flask-whoshalchemy3 throws an AttributeError as shown below

Traceback (most recent call last):
  File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/flask/app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/flask/app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/flask/app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/flask/app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/flask/app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/usr/local/Equimolar/EquimolarBlog/equimolar_blog/views.py", line 191, in search
    results = pub_article.search(q).paginate(1)
  File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py", line 501, in paginate
    total = self.order_by(None).count()
  File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 3776, in count
    return self.from_self(col).scalar()
  File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 3496, in scalar
    ret = self.one()
  File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 3463, in one
    ret = self.one_or_none()
  File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 3432, in one_or_none
    ret = list(self)
  File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/flask_whooshalchemy/__init__.py", line 70, in __iter__
    str_pk = str(getattr(row, self._pk))
AttributeError: 'result' object has no attribute 'id'

BaseQuery object has no attribute 'search'

I followed the sample code in the readme but i end up with this error....no attribute search.

Is there more to be added to the sample code before i can make a search query ?

Flask' object has no attribute 'search_indexes'

When I am trying to create new index, using flask_whooshalchemy.create_index(app, Store), it throws Flask' object has no attribute 'search_indexes'.

I used this function to create indexes because my hunch is that it replaces old flask_whooshalchemy.whoosh_index(app, Store) function.

Though ReadMe file does not ask me to add flask_whooshalchemy.create_index(app, Store) at the end of the model I want to index, but if I don't do that, it throws me an error when I try to query using MyModel.query.search(query_string)

Null error in SQL Statement

class Product(db.model):
    __searchable__ = ['title', 'description']

    __analyzer__ = StemmingAnalyzer()
    __tablename__ = "Product"
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    description = db.Column(db.Text, nullable=True)
 query = request.args.get('q', '') -> Organization
 products = Product.query.search(query, limit=num_posts)
@datapilot.before_first_request
def bootstrap():
    flask_whooshalchemy3.search_index(datapilot, Product)

The query variable is being passed but the SQL query is built into SELECT * From Product WHERE null

Unknown system variable 'tx_isolation'

I have mysql version 8 installed mysql-8.0.18-winx64
When I have migrate command done, it shows following error

python app.py db migrate
Traceback (most recent call last):
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2147, in _wrap_pool_connect
return fn()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 328, in unique_connection
return _ConnectionFairy._checkout(self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 766, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 516, in checkout
rec = pool._do_get()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 1229, in _do_get
return self._create_connection()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 333, in _create_connection
return _ConnectionRecord(self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 461, in init
self.__connect(first_connect_check=True)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 661, in __connect
exec_once(self.connection, self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 246, in exec_once
self(*args, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 256, in call
fn(*args, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1331, in go
return once_fn(*arg, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\strategies.py", line 181, in first_connect
dialect.initialize(c)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1714, in initialize
default.DefaultDialect.initialize(self, connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\default.py", line 256, in initialize
self.get_isolation_level(connection.connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1569, in get_isolation_level
cursor.execute('SELECT @@tx_isolation')
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 170, in execute
result = self._query(query)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 328, in _query
conn.query(q)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 517, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 732, in _read_query_result
result.read()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 1075, in read
first_packet = self.connection._read_packet()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 684, in _read_packet
packet.check_error()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\protocol.py", line 220, in check_error
err.raise_mysql_exception(self._data)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.InternalError: (1193, "Unknown system variable 'tx_isolation'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "app.py", line 44, in
manager.run()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script_init_.py", line 417, in run
result = self.handle(argv[0], argv[1:])
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script_init_.py", line 386, in handle
res = handle(*args, **config)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script\commands.py", line 216, in call
return self.run(*args, **kwargs)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_migrate_init_.py", line 95, in wrapped
f(*args, **kwargs)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_migrate_init_.py", line 215, in migrate
version_path=version_path, rev_id=rev_id)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\command.py", line 214, in revision
script_directory.run_env()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\script\base.py", line 489, in run_env
util.load_python_file(self.dir, "env.py")
File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\util\pyfiles.py", line 98, in load_python_file
module = load_module_py(module_id, path)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\util\compat.py", line 173, in load_module_py
spec.loader.exec_module(module)
File "", line 728, in exec_module
File "", line 219, in _call_with_frames_removed
File "migrations\env.py", line 96, in
run_migrations_online()
File "migrations\env.py", line 81, in run_migrations_online
with connectable.connect() as connection:
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2091, in connect
return self._connection_cls(self, **kwargs)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 90, in init
if connection is not None else engine.raw_connection()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2177, in raw_connection
self.pool.unique_connection, _connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2151, in _wrap_pool_connect
e, dialect, self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 1465, in _handle_dbapi_exception_noconnection
exc_info
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\compat.py", line 203, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\compat.py", line 186, in reraise
raise value.with_traceback(tb)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2147, in _wrap_pool_connect
return fn()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 328, in unique_connection
return _ConnectionFairy._checkout(self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 766, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 516, in checkout
rec = pool._do_get()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 1229, in _do_get
return self._create_connection()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 333, in _create_connection
return _ConnectionRecord(self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 461, in init
self.__connect(first_connect_check=True)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 661, in __connect
exec_once(self.connection, self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 246, in exec_once
self(*args, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 256, in call
fn(*args, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1331, in go
return once_fn(*arg, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\strategies.py", line 181, in first_connect
dialect.initialize(c)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1714, in initialize
default.DefaultDialect.initialize(self, connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\default.py", line 256, in initialize
self.get_isolation_level(connection.connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1569, in get_isolation_level
cursor.execute('SELECT @@tx_isolation')
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 170, in execute
result = self._query(query)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 328, in _query
conn.query(q)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 517, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 732, in _read_query_result
result.read()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 1075, in read
first_packet = self.connection._read_packet()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 684, in _read_packet
packet.check_error()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\protocol.py", line 220, in check_error
err.raise_mysql_exception(self._data)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception
raise errorclass(errno, errval)
sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1193, "Unknown system variable 'tx_isolation'")

(env) C:\sources\Demo\Demo_api>python app.py db stamp head
Traceback (most recent call last):
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2147, in _wrap_pool_connect
return fn()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 328, in unique_connection
return _ConnectionFairy._checkout(self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 766, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 516, in checkout
rec = pool._do_get()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 1229, in _do_get
return self._create_connection()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 333, in _create_connection
return _ConnectionRecord(self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 461, in init
self.__connect(first_connect_check=True)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 661, in __connect
exec_once(self.connection, self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 246, in exec_once
self(*args, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 256, in call
fn(*args, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1331, in go
return once_fn(*arg, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\strategies.py", line 181, in first_connect
dialect.initialize(c)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1714, in initialize
default.DefaultDialect.initialize(self, connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\default.py", line 256, in initialize
self.get_isolation_level(connection.connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1569, in get_isolation_level
cursor.execute('SELECT @@tx_isolation')
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 170, in execute
result = self._query(query)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 328, in _query
conn.query(q)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 517, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 732, in _read_query_result
result.read()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 1075, in read
first_packet = self.connection._read_packet()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 684, in _read_packet
packet.check_error()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\protocol.py", line 220, in check_error
err.raise_mysql_exception(self._data)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.InternalError: (1193, "Unknown system variable 'tx_isolation'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "app.py", line 44, in
manager.run()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script_init_.py", line 417, in run
result = self.handle(argv[0], argv[1:])
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script_init_.py", line 386, in handle
res = handle(*args, **config)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script\commands.py", line 216, in call
return self.run(*args, **kwargs)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_migrate_init_.py", line 95, in wrapped
f(*args, **kwargs)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_migrate_init_.py", line 412, in stamp
command.stamp(config, revision, sql=sql, tag=tag)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\command.py", line 579, in stamp
script.run_env()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\script\base.py", line 489, in run_env
util.load_python_file(self.dir, "env.py")
File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\util\pyfiles.py", line 98, in load_python_file
module = load_module_py(module_id, path)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\util\compat.py", line 173, in load_module_py
spec.loader.exec_module(module)
File "", line 728, in exec_module
File "", line 219, in _call_with_frames_removed
File "migrations\env.py", line 96, in
run_migrations_online()
File "migrations\env.py", line 81, in run_migrations_online
with connectable.connect() as connection:
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2091, in connect
return self._connection_cls(self, **kwargs)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 90, in init
if connection is not None else engine.raw_connection()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2177, in raw_connection
self.pool.unique_connection, _connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2151, in _wrap_pool_connect
e, dialect, self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 1465, in _handle_dbapi_exception_noconnection
exc_info
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\compat.py", line 203, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\compat.py", line 186, in reraise
raise value.with_traceback(tb)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2147, in _wrap_pool_connect
return fn()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 328, in unique_connection
return _ConnectionFairy._checkout(self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 766, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 516, in checkout
rec = pool._do_get()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 1229, in _do_get
return self._create_connection()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 333, in _create_connection
return _ConnectionRecord(self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 461, in init
self.__connect(first_connect_check=True)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 661, in __connect
exec_once(self.connection, self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 246, in exec_once
self(*args, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 256, in call
fn(*args, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1331, in go
return once_fn(*arg, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\strategies.py", line 181, in first_connect
dialect.initialize(c)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1714, in initialize
default.DefaultDialect.initialize(self, connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\default.py", line 256, in initialize
self.get_isolation_level(connection.connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1569, in get_isolation_level
cursor.execute('SELECT @@tx_isolation')
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 170, in execute
result = self._query(query)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 328, in _query
conn.query(q)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 517, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 732, in _read_query_result
result.read()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 1075, in read
first_packet = self.connection._read_packet()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 684, in _read_packet
packet.check_error()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\protocol.py", line 220, in check_error
err.raise_mysql_exception(self._data)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception
raise errorclass(errno, errval)
sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1193, "Unknown system variable 'tx_isolation'")

(env) C:\sources\Demo\Demo_api>python app.py db upgrade
Traceback (most recent call last):
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2147, in _wrap_pool_connect
return fn()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 328, in unique_connection
return _ConnectionFairy._checkout(self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 766, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 516, in checkout
rec = pool._do_get()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 1229, in _do_get
return self._create_connection()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 333, in _create_connection
return _ConnectionRecord(self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 461, in init
self.__connect(first_connect_check=True)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 661, in __connect
exec_once(self.connection, self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 246, in exec_once
self(*args, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 256, in call
fn(*args, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1331, in go
return once_fn(*arg, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\strategies.py", line 181, in first_connect
dialect.initialize(c)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1714, in initialize
default.DefaultDialect.initialize(self, connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\default.py", line 256, in initialize
self.get_isolation_level(connection.connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1569, in get_isolation_level
cursor.execute('SELECT @@tx_isolation')
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 170, in execute
result = self._query(query)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 328, in _query
conn.query(q)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 517, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 732, in _read_query_result
result.read()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 1075, in read
first_packet = self.connection._read_packet()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 684, in _read_packet
packet.check_error()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\protocol.py", line 220, in check_error
err.raise_mysql_exception(self._data)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.InternalError: (1193, "Unknown system variable 'tx_isolation'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "app.py", line 44, in
manager.run()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script_init_.py", line 417, in run
result = self.handle(argv[0], argv[1:])
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script_init_.py", line 386, in handle
res = handle(*args, **config)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script\commands.py", line 216, in call
return self.run(*args, **kwargs)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_migrate_init_.py", line 95, in wrapped
f(*args, **kwargs)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_migrate_init_.py", line 280, in upgrade
command.upgrade(config, revision, sql=sql, tag=tag)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\command.py", line 298, in upgrade
script.run_env()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\script\base.py", line 489, in run_env
util.load_python_file(self.dir, "env.py")
File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\util\pyfiles.py", line 98, in load_python_file
module = load_module_py(module_id, path)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\util\compat.py", line 173, in load_module_py
spec.loader.exec_module(module)
File "", line 728, in exec_module
File "", line 219, in _call_with_frames_removed
File "migrations\env.py", line 96, in
run_migrations_online()
File "migrations\env.py", line 81, in run_migrations_online
with connectable.connect() as connection:
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2091, in connect
return self._connection_cls(self, **kwargs)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 90, in init
if connection is not None else engine.raw_connection()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2177, in raw_connection
self.pool.unique_connection, _connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2151, in _wrap_pool_connect
e, dialect, self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 1465, in _handle_dbapi_exception_noconnection
exc_info
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\compat.py", line 203, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\compat.py", line 186, in reraise
raise value.with_traceback(tb)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2147, in _wrap_pool_connect
return fn()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 328, in unique_connection
return _ConnectionFairy._checkout(self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 766, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 516, in checkout
rec = pool._do_get()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 1229, in _do_get
return self._create_connection()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 333, in _create_connection
return _ConnectionRecord(self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 461, in init
self.__connect(first_connect_check=True)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 661, in __connect
exec_once(self.connection, self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 246, in exec_once
self(*args, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 256, in call
fn(*args, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1331, in go
return once_fn(*arg, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\strategies.py", line 181, in first_connect
dialect.initialize(c)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1714, in initialize
default.DefaultDialect.initialize(self, connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\default.py", line 256, in initialize
self.get_isolation_level(connection.connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1569, in get_isolation_level
cursor.execute('SELECT @@tx_isolation')
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 170, in execute
result = self._query(query)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 328, in _query
conn.query(q)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 517, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 732, in _read_query_result
result.read()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 1075, in read
first_packet = self.connection._read_packet()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 684, in _read_packet
packet.check_error()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\protocol.py", line 220, in check_error
err.raise_mysql_exception(self._data)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception
raise errorclass(errno, errval)
sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1193, "Unknown system variable 'tx_isolation'")

(env) C:\sources\Demo\Demo_api>python app.py db stamp head
Traceback (most recent call last):
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2147, in _wrap_pool_connect
return fn()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 328, in unique_connection
return _ConnectionFairy._checkout(self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 766, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 516, in checkout
rec = pool._do_get()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 1229, in _do_get
return self._create_connection()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 333, in _create_connection
return _ConnectionRecord(self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 461, in init
self.__connect(first_connect_check=True)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 661, in __connect
exec_once(self.connection, self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 246, in exec_once
self(*args, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 256, in call
fn(*args, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1331, in go
return once_fn(*arg, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\strategies.py", line 181, in first_connect
dialect.initialize(c)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1714, in initialize
default.DefaultDialect.initialize(self, connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\default.py", line 256, in initialize
self.get_isolation_level(connection.connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1569, in get_isolation_level
cursor.execute('SELECT @@tx_isolation')
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 170, in execute
result = self._query(query)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 328, in _query
conn.query(q)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 517, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 732, in _read_query_result
result.read()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 1075, in read
first_packet = self.connection._read_packet()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 684, in _read_packet
packet.check_error()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\protocol.py", line 220, in check_error
err.raise_mysql_exception(self._data)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.InternalError: (1193, "Unknown system variable 'tx_isolation'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "app.py", line 44, in
manager.run()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script_init_.py", line 417, in run
result = self.handle(argv[0], argv[1:])
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script_init_.py", line 386, in handle
res = handle(*args, **config)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script\commands.py", line 216, in call
return self.run(*args, **kwargs)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_migrate_init_.py", line 95, in wrapped
f(*args, **kwargs)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_migrate_init_.py", line 412, in stamp
command.stamp(config, revision, sql=sql, tag=tag)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\command.py", line 579, in stamp
script.run_env()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\script\base.py", line 489, in run_env
util.load_python_file(self.dir, "env.py")
File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\util\pyfiles.py", line 98, in load_python_file
module = load_module_py(module_id, path)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\util\compat.py", line 173, in load_module_py
spec.loader.exec_module(module)
File "", line 728, in exec_module
File "", line 219, in _call_with_frames_removed
File "migrations\env.py", line 96, in
run_migrations_online()
File "migrations\env.py", line 81, in run_migrations_online
with connectable.connect() as connection:
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2091, in connect
return self._connection_cls(self, **kwargs)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 90, in init
if connection is not None else engine.raw_connection()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2177, in raw_connection
self.pool.unique_connection, _connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2151, in _wrap_pool_connect
e, dialect, self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 1465, in _handle_dbapi_exception_noconnection
exc_info
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\compat.py", line 203, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\compat.py", line 186, in reraise
raise value.with_traceback(tb)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2147, in _wrap_pool_connect
return fn()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 328, in unique_connection
return _ConnectionFairy._checkout(self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 766, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 516, in checkout
rec = pool._do_get()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 1229, in _do_get
return self._create_connection()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 333, in _create_connection
return _ConnectionRecord(self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 461, in init
self.__connect(first_connect_check=True)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 661, in __connect
exec_once(self.connection, self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 246, in exec_once
self(*args, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 256, in call
fn(*args, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1331, in go
return once_fn(*arg, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\strategies.py", line 181, in first_connect
dialect.initialize(c)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1714, in initialize
default.DefaultDialect.initialize(self, connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\default.py", line 256, in initialize
self.get_isolation_level(connection.connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1569, in get_isolation_level
cursor.execute('SELECT @@tx_isolation')
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 170, in execute
result = self._query(query)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 328, in _query
conn.query(q)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 517, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 732, in _read_query_result
result.read()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 1075, in read
first_packet = self.connection._read_packet()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 684, in _read_packet
packet.check_error()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\protocol.py", line 220, in check_error
err.raise_mysql_exception(self._data)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception
raise errorclass(errno, errval)
sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1193, "Unknown system variable 'tx_isolation'")

(env) C:\sources\Demo\Demo_api>python app.py db migrate
Traceback (most recent call last):
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2147, in _wrap_pool_connect
return fn()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 328, in unique_connection
return _ConnectionFairy._checkout(self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 766, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 516, in checkout
rec = pool._do_get()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 1229, in _do_get
return self._create_connection()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 333, in _create_connection
return _ConnectionRecord(self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 461, in init
self.__connect(first_connect_check=True)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 661, in __connect
exec_once(self.connection, self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 246, in exec_once
self(*args, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 256, in call
fn(*args, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1331, in go
return once_fn(*arg, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\strategies.py", line 181, in first_connect
dialect.initialize(c)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1714, in initialize
default.DefaultDialect.initialize(self, connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\default.py", line 256, in initialize
self.get_isolation_level(connection.connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1569, in get_isolation_level
cursor.execute('SELECT @@tx_isolation')
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 170, in execute
result = self._query(query)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 328, in _query
conn.query(q)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 517, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 732, in _read_query_result
result.read()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 1075, in read
first_packet = self.connection._read_packet()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 684, in _read_packet
packet.check_error()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\protocol.py", line 220, in check_error
err.raise_mysql_exception(self._data)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.InternalError: (1193, "Unknown system variable 'tx_isolation'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "app.py", line 44, in
manager.run()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script_init_.py", line 417, in run
result = self.handle(argv[0], argv[1:])
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script_init_.py", line 386, in handle
res = handle(*args, **config)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script\commands.py", line 216, in call
return self.run(*args, **kwargs)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_migrate_init_.py", line 95, in wrapped
f(*args, **kwargs)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_migrate_init_.py", line 215, in migrate
version_path=version_path, rev_id=rev_id)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\command.py", line 214, in revision
script_directory.run_env()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\script\base.py", line 489, in run_env
util.load_python_file(self.dir, "env.py")
File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\util\pyfiles.py", line 98, in load_python_file
module = load_module_py(module_id, path)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\util\compat.py", line 173, in load_module_py
spec.loader.exec_module(module)
File "", line 728, in exec_module
File "", line 219, in _call_with_frames_removed
File "migrations\env.py", line 96, in
run_migrations_online()
File "migrations\env.py", line 81, in run_migrations_online
with connectable.connect() as connection:
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2091, in connect
return self._connection_cls(self, **kwargs)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 90, in init
if connection is not None else engine.raw_connection()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2177, in raw_connection
self.pool.unique_connection, _connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2151, in _wrap_pool_connect
e, dialect, self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 1465, in _handle_dbapi_exception_noconnection
exc_info
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\compat.py", line 203, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\compat.py", line 186, in reraise
raise value.with_traceback(tb)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2147, in _wrap_pool_connect
return fn()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 328, in unique_connection
return _ConnectionFairy._checkout(self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 766, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 516, in checkout
rec = pool._do_get()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 1229, in _do_get
return self._create_connection()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 333, in _create_connection
return _ConnectionRecord(self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 461, in init
self.__connect(first_connect_check=True)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 661, in __connect
exec_once(self.connection, self)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 246, in exec_once
self(*args, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 256, in call
fn(*args, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1331, in go
return once_fn(*arg, **kw)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\strategies.py", line 181, in first_connect
dialect.initialize(c)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1714, in initialize
default.DefaultDialect.initialize(self, connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\default.py", line 256, in initialize
self.get_isolation_level(connection.connection)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1569, in get_isolation_level
cursor.execute('SELECT @@tx_isolation')
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 170, in execute
result = self._query(query)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 328, in _query
conn.query(q)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 517, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 732, in _read_query_result
result.read()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 1075, in read
first_packet = self.connection._read_packet()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 684, in _read_packet
packet.check_error()
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\protocol.py", line 220, in check_error
err.raise_mysql_exception(self._data)
File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception
raise errorclass(errno, errval)
sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1193, "Unknown system variable 'tx_isolation'")

AttributeError: 'BaseQuery' object has no attribute 'search'

hi
i testing this extension but get error
my config for Flask

<Config {'DEBUG': True, 'TESTING': False, 'PROPAGATE_EXCEPTIONS': None, 'PRESERVE_CONTEXT_ON_EXCEPTION': None, 'SECRET_KEY': None, 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(31), 'USE_X_SENDFILE': False, 'LOGGER_NAME': 'test', 'LOGGER_HANDLER_POLICY': 'always', 'SERVER_NAME': None, 'APPLICATION_ROOT': None, 'SESSION_COOKIE_NAME': 'session', 'SESSION_COOKIE_DOMAIN': None, 'SESSION_COOKIE_PATH': None, 'SESSION_COOKIE_HTTPONLY': True, 'SESSION_COOKIE_SECURE': False, 'SESSION_REFRESH_EACH_REQUEST': True, 'MAX_CONTENT_LENGTH': None, 'SEND_FILE_MAX_AGE_DEFAULT': datetime.timedelta(0, 43200), 'TRAP_BAD_REQUEST_ERRORS': False, 'TRAP_HTTP_EXCEPTIONS': False, 'EXPLAIN_TEMPLATE_LOADING': False, 'PREFERRED_URL_SCHEME': 'http', 'JSON_AS_ASCII': True, 'JSON_SORT_KEYS': True, 'JSONIFY_PRETTYPRINT_REGULAR': True, 'JSONIFY_MIMETYPE': 'application/json', 'TEMPLATES_AUTO_RELOAD': None, 'BASEDIR': '/mnt/website/WORKING/website_crawler/config', 'SQLALCHEMY_DATABASE_URI': 'sqlite:////mnt/website/WORKING/website_crawler/config/app.db', 'SQLALCHEMY_TRACK_MODIFICATIONS': False, 'TOP_LEVEL_DIR': '/mnt/website/WORKING/website_crawler/config', 'WHOOSH_BASE': '/mnt/website/WORKING/website_crawler/config/packtpub', 'WHOOSH_INDEX_PATH': '/mnt/website/WORKING/website_crawler/config/packtpub', 'SQLALCHEMY_BINDS': None, 'SQLALCHEMY_NATIVE_UNICODE': None, 'SQLALCHEMY_ECHO': False, 'SQLALCHEMY_RECORD_QUERIES': None, 'SQLALCHEMY_POOL_SIZE': None, 'SQLALCHEMY_POOL_TIMEOUT': None, 'SQLALCHEMY_POOL_RECYCLE': None, 'SQLALCHEMY_MAX_OVERFLOW': None, 'SQLALCHEMY_COMMIT_ON_TEARDOWN': False}>

and my main.py

from flask import Flask, request
from flask_sqlalchemy import SQLAlchemy
import flask_whooshalchemy
from whoosh.analysis import StemmingAnalyzer
app = Flask(__name__)
app.config.from_pyfile('settings.py')
db = SQLAlchemy(app)
class PACKTPUB(db.Model):
    __tablename__ = "packtpubs"
    # these fields will be indexed by whoosh
    __searchable__ = ['title', 'isbn']
    _analyzer__ = StemmingAnalyzer()
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(500))
    isbn = db.Column(db.String(50), index=True, unique=True)
    def __init__(self, title, isbn):
        self.title = title
        self.isbn = isbn
    def __repr__(self):
        return '<PacktPub Title %r>' % (self.title)
@app.route('/packtpubs/search')
def search():
    num_posts = min(request.args.get('limit', 10), 50)
    query = request.args.get('q', '')
    results = PACKTPUB.query.search(query, limit=num_posts)
    return results
@app.route('/packtpubs/create', methods=['POST'])
def packtpubs_create():
    packtpub = PACKTPUB(
        title=request.get_json().get('title'),
        isbn=request.get_json().get('isbn')
    )
    db.session.add(packtpub)
    db.session.commit()
    return 'DONE'
if __name__ == "__main__":
    app.run()

how to make it works

AttributeError: 'BaseQuery' object has no attribute 'search'

Hi there,

Giving this a go.

Here is my config:

# Database
SQLALCHEMY_DATABASE_URI = 'sqlite:///db/site.db'
# turning on tracking so the search extension can track if anything in the database changes
SQL_TRACK_MODIFICATIONS = True

# set the location for the whoosh index
WHOOSH_INDEX_PATH = 'whooshIndex'
WHOOSH_ANALYZER = 'StemmingAnalyzer'

My model:

class Org(db.Model):
    __searchable__ = ['orgName', 'phone1', 'phone2', 'phone3', 'email1', 'email2', 'email3', 'backgroundInfo']
    __analyzer__ = StemmingAnalyzer()
    id = db.Column(db.Integer, primary_key=True)
    active = db.Column(db.Boolean, unique=False, default=True)
    orgName = db.Column(db.String(200), unique=True, nullable=False)
    posts = db.relationship('Log', backref='organisation', lazy=True)
    postalStreet = db.Column(db.String(200))
    postalTown = db.Column(db.String(60))
    postalState = db.Column(db.String(20))
    postalPostCode = db.Column(db.String(10))
    backgroundInfo = db.Column(db.String(1000))
    phone1 = db.Column(db.String(128))
    phone2 = db.Column(db.String(128))
    phone3 = db.Column(db.String(128))
    phone1Type = db.Column(db.String(24))
    phone2Type = db.Column(db.String(24))
    phone3Type = db.Column(db.String(24))
    email1 = db.Column(db.String(128))
    email2 = db.Column(db.String(128))
    email3 = db.Column(db.String(128))
    email1Type = db.Column(db.String(24))
    email2Type = db.Column(db.String(24))
    email3Type = db.Column(db.String(24))

    def __repr__(self):  # this is how our object is printed when we print it out
        return f"Org('{self.orgName}')"

If I add data it creates the index files. I can see them being created in the file system. All good from that end.

Here is my search code in a view:

num_posts = min(request.args.get('limit', 10), 50)
query = request.args.get('q', '')
results = Org.query.search(query, limit=num_posts)

It's returning AttributeError: 'BaseQuery' object has no attribute 'search'

I've done a heap of searching but am coming up empty. Can you spot what the issue is?

Thank you

Flask_whooshalchemy3 not indexing entries in blueprints

I have no problem when using flask_whooshalchemy3 without blueprints but with blueprints and factory function, either the indexes were not created or created but never searched.

Without Blueprint: Here is a portion of the view file, I called the flask_whooshalchemy3 search method in the before_first_request decorator.

from datetime import datetime
import json
import flask_whooshalchemy

from flask import render_template, request, abort, redirect, \
    url_for, flash
from werkzeug.urls import url_parse
from flask_security import Security, SQLAlchemyUserDatastore, \
    utils, login_required, login_user, logout_user, current_user
from flask_admin import Admin

from . import app
from .models import Article, Tag, db, User, Role, articles_tags, \
                    ArticleAdmin, TagAdmin, UserAdmin, RoleAdmin
from .forms import ArticleForm, LoginForm, RegistrationForm
from .utilities import split_article, update_article, can_edit
# ----------- Initializations----------------------------------
# Initialize the SQLAlchemy data store.
user_datastore = SQLAlchemyUserDatastore(db, User, Role)
# Initialize Flask-Security.
Security(app, user_datastore)

# Executes before the first request is processed.
@app.before_first_request
def before_first_request():

    # Create any database tables that don't exist yet.
    db.create_all()
    # Indexing of articles to be search ready
    flask_whooshalchemy.search_index(app, Article)

With Blueprint: I called the search method in the app factory

from flask import Flask
from flask_admin import Admin
import flask_whooshalchemy
from flask_fileupload import FlaskFileUpload
from models import Article, Tag, db, User, Role, ArticleAdmin, \
                    TagAdmin, UserAdmin, RoleAdmin
from config import config

def create_app(config_name):
    app=Flask(__name__)
    app.config.from_object(config[config_name])
    db.init_app(app)
    db.reflect(app=app)
    # Initialize Flask-FileUpload.
    FlaskFileUpload(app)
    flask_whooshalchemy.search_index(app, Article)
    # Initialize Flask-Admin.
    admin = Admin(app)
    admin.add_view(ArticleAdmin(Article, db.session))
    admin.add_view(TagAdmin(Tag, db.session))
    admin.add_view(UserAdmin(User, db.session))
    admin.add_view(RoleAdmin(Role, db.session))
    # ----------- Initializations----------------------------------
    # Initialize the SQLAlchemy data store.
    from flask_security import Security, SQLAlchemyUserDatastore
    user_datastore = SQLAlchemyUserDatastore(db, User, Role)
    # Initialize Flask-Security.
    Security(app, user_datastore)
    from equimolar_blog.main_app import create_module
    with app.app_context():
        # Time to make sure roles exist in the database
        db.create_all()
        try:
            from create_db import create_roles
            create_roles(user_datastore, db)
        except ImportError:
            pass
        create_module(app)
    return app

I can't seem to point-out where the problem is.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.