Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Invalid precision value error #2360

Open
HikariPL opened this issue May 28, 2023 · 2 comments
Open

Invalid precision value error #2360

HikariPL opened this issue May 28, 2023 · 2 comments

Comments

@HikariPL
Copy link

HikariPL commented May 28, 2023

Hello,

I have been using flask_admin for approx. 2 years in my flask app, but recently (after updating all packages) it stopped working. I can open front page of flask admin panel, but whenever I try to display content of a table then I get the following error:

DBAPIError
sqlalchemy.exc.DBAPIError: (pyodbc.Error) ('HY104', '[HY104] [Microsoft][ODBC SQL Server Driver]Invalid precision value (0) (SQLBindParameter)')
[SQL: SELECT count(?) AS count_1 
FROM setup.users]
[parameters: ('*',)]
(Background on this error at: https://sqlalche.me/e/20/dbapi)

Traceback (most recent call last)
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1963, in _exec_single_context
self.dialect.do_execute(
^
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\sqlalchemy\engine\default.py", line 920, in do_execute
cursor.execute(statement, parameters)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The above exception was the direct cause of the following exception:
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\flask\app.py", line 2213, in __call__
return self.wsgi_app(environ, start_response)
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\flask\app.py", line 2193, in wsgi_app
response = self.handle_exception(e)
           ^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\flask\app.py", line 2190, in wsgi_app
response = self.full_dispatch_request()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\flask\app.py", line 1486, in full_dispatch_request
rv = self.handle_user_exception(e)
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\flask\app.py", line 1484, in full_dispatch_request
rv = self.dispatch_request()
     ^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\flask\app.py", line 1469, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\flask_admin\base.py", line 69, in inner
return self._run_view(f, *args, **kwargs)
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\flask_admin\base.py", line 369, in _run_view
return fn(self, *args, **kwargs)
       ^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\flask_admin\model\base.py", line 1980, in index_view
count, data = self.get_list(view_args.page, sort_column, view_args.sort_desc,
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\flask_admin\contrib\sqla\view.py", line 1086, in get_list
count = count_query.scalar() if count_query else None
        ^^^^^^^^^^^^^^^^^^^^
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\sqlalchemy\orm\query.py", line 2820, in scalar
ret = self.one()
      ^^^^^^^^^^
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\sqlalchemy\orm\query.py", line 2793, in one
return self._iter().one()  # type: ignore
       ^^^^^^^^^^^^
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\sqlalchemy\orm\query.py", line 2842, in _iter
result: Union[ScalarResult[_T], Result[_T]] = self.session.execute(
                                              
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2231, in execute
return self._execute_internal(
       
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2126, in _execute_internal
result: Result[Any] = compile_state_cls.orm_execute_statement(
                      
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\sqlalchemy\orm\context.py", line 292, in orm_execute_statement
result = conn.execute(
         
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1413, in execute
return meth(
       
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\sqlalchemy\sql\elements.py", line 483, in _execute_on_connection
return connection._execute_clauseelement(
       
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1637, in _execute_clauseelement
ret = self._execute_context(
      
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1841, in _execute_context
return self._exec_single_context(
       
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1982, in _exec_single_context
self._handle_dbapi_exception(
^
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 2339, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1963, in _exec_single_context
self.dialect.do_execute(
^
File "C:\Users\lzochowski001\Documents\FinanceManagementApp\Test with new packages\venv\Lib\site-packages\sqlalchemy\engine\default.py", line 920, in do_execute
cursor.execute(statement, parameters)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
sqlalchemy.exc.DBAPIError: (pyodbc.Error) ('HY104', '[HY104] [Microsoft][ODBC SQL Server Driver]Invalid precision value (0) (SQLBindParameter)')
[SQL: SELECT count(?) AS count_1
FROM setup.users]
[parameters: ('*',)]
(Background on this error at: https://sqlalche.me/e/20/dbapi)

I am connecting to SQL Server via pyodbc. I think it must be linked with this issue GitHub.

Possibly explicit input size is needed when admin creates engine:
e = create_engine("mssql+pyodbc://...", use_setinputsizes=False)

Any ideas how to easily solve it?

@HikariPL
Copy link
Author

HikariPL commented Jun 9, 2023

Dear All, any ideas how to fix it?

@agxc
Copy link

agxc commented Sep 23, 2023

No the issue cannot be resolved by use_setinputsizes=False. It is not working. I tried the following code. Not working at all

import argparse
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView
from sqlalchemy import create_engine

app = Flask(__name__)

# Setup the Flask app
app.config['SECRET_KEY'] = 'mysecret'
app.config['SQLALCHEMY_DATABASE_URI'] = "YOUR SQL SERVER DB connection"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

# Optionally, if you want to perform some operations directly with the engine, you can create it like this:
engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI'], echo=True, use_setinputsizes=False)

class User(db.Model):
    __tablename__ = 'user'
    __table_args__ = {'schema': 'DevApp'}
    
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(150), unique=True)
    email = db.Column(db.String(150))

admin = Admin(app, name='My App Admin', template_mode='bootstrap3')
admin.add_view(ModelView(User, db.session))

def create_db():
    """Creates the database tables."""
    with app.app_context():
        db.create_all()
        print('Database tables created successfully.')

def drop_db():
    """Drops the database tables."""
    with app.app_context():
        db.drop_all()
        print('Database tables dropped successfully.')

def run_app():
    app.run(debug=True)

def main():
    parser = argparse.ArgumentParser(description="Manage the Flask application.")
    parser.add_argument('command', choices=['run', 'create_db', 'drop_db'],
                        help='the command to run')
    args = parser.parse_args()
    
    if args.command == 'run':
        run_app()
    elif args.command == 'create_db':
        create_db()
    elif args.command == 'drop_db':
        drop_db()

if __name__ == '__main__':
    main()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants