“引擎”对象没有属性“drivername” [英] 'Engine' object has no attribute 'drivername'

查看:425
本文介绍了“引擎”对象没有属性“drivername”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的应用程序中集成了Flask和SQLAlchemy,但是可以理解,为什么在登录页面中获取大堆栈跟踪。现在,我将在从Debian切换到Mac OS后执行这些错误。所有在virtuaelnv使用的库。

我现在有这些东西:

1)在flask_app.py:

  from flask导入烧瓶,请求,会话$ b $ from flask_sqlalchemy导入SQLAlchemy 
导入表格作为dbTables $ b $ db from db.queries import engine as db_engine
$ b $ app = Flask(__ name__,template_folder ='。/ web / templates /',static_folder ='。/ web / static /',static_url_path ='')
app .config ['SECRET_KEY'] ='some_secret_key'
app.config ['SQLALCHEMY_DATABASE_URI'] = db_engine
db_connection = SQLAlchemy(app)
$ b import web.admin
import web.views

if __name__ == web_admin import
web.views导入*
app.run(port = 8500,debug = True)



<2>其我的queries.py,包含这个字符串和代码从PostgreSQL数据库获取数据:

 从hashlib导入日期时间
导入sha25 6
from time import gmtime,strftime

import sqlalchemy
import sqlalchemy.exc
from sqlalchemy import and_,func,asc $ b $ from sqlalchemy.orm import sessionmaker

从表导入File作为FileTable
从表导入用户,文件服务器,文件空间,目录

engine = sqlalchemy.create_engine(postgresql:// dev:开发者@ localhost / csan,pool_size = 20,max_overflow = 0)
Session = sessionmaker(bind = engine)

#和一些查询DB
#...



3)这个堆栈跟踪发送到 http:// localhost:8500 / admin / login POST请求:

  AttributeError 
AttributeError:'Engine'没有属性'drivername'

Traceback(最近一次调用的最后一个)
文件/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/flask/app.py ,第1836行,在__call__
返回self.wsgi_app(environ,start_response)
文件/ Users / savicvalera / code / H在$ w
response = self.make_response(self.handle_exception(e))
文件/ Users / lib / python2.7 / site-packages / flask / app.py / savicvalera / code / Helenae / lib / python2.7 / site-packages / flask / app.py,第1403行,在handle_exception
reraise(exc_type,exc_value,tb)
文件/ Users / savicvalera /code/Helenae/lib/python2.7/site-packages/flask/app.py,第1817行,在wsgi_app
response = self.full_dispatch_request()
文件/ Users / savicvalera / code /Helenae/lib/python2.7/site-packages/flask/app.py,行1477,在full_dispatch_request
rv = self.handle_user_exception(e)
文件/ Users / savicvalera / code / helenae / lib / python2.7 / site-packages / flask / app.py,第1381行,在handle_user_exception
reraise(exc_type,exc_value,tb)
文件/ Users / savicvalera / code / Helenae /lib/python2.7/site-packages/flask/app.py,第1475行,在full_dispatch_request
rv = self.dispatch_request()
文件/ Users / savicvalera / code / Helenae / lib /python2.7/site-packages/flask/ap p.py,第1461行,在dispatch_request
返回self.view_functions [rule.endpoint](** req.view_args)
文件/Users/savicvalera/code/Helenae/lib/python2.7 /site-packages/flask_admin/base.py,第62行,内部
返回f(self,* args,** kwargs)
文件/ Users / savicvalera / code / Helenae / Helenae / helenae / web / admin.py,第42行,在login_view
如果helpers.validate_form_on_submit(表单):
文件/Users/savicvalera/code/Helenae/lib/python2.7/site-packages /flask_admin/helpers.py,第47行,在validate_form_on_submit
返回is_form_submitted()和form.validate()
文件/Users/savicvalera/code/Helenae/lib/python2.7/site- packages / wtforms / form.py,第310行,验证
返回超级(Form,self).validate(extra)
文件/Users/savicvalera/code/Helenae/lib/python2.7 /site-packages/wtforms/form.py,第152行,验证
(如果不是)field.validate(self,extra):
文件/ Users / savicvalera / code / Helenae / lib / python2 .7 / site-packages / wtforms / fields / core.py,第200行,在vali中date
stop_validation = self._run_validation_chain(form,chain)
文件/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/wtforms/fields/core.py,行220,在_run_validation_chain
验证器(表单,自我)
文件/Users/savicvalera/code/Helenae/Helenae/helenae/web/forms.py,第19行,在validate_login
用户= get_user(self.login.data)
文件/Users/savicvalera/code/Helenae/Helenae/helenae/web/forms.py,第11行,在get_user
返回db_connection.session.query (dbTables.Users).filter_by(name = user).first()
文件/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/sqlalchemy/orm/scoping.py, ($ args,** kwargs)
文件/Users/savicvalera/code/Helenae/lib/python2.7/site在/_call__
返回self.registry.setdefault(key,self.createfunc())
文件/ Users / savicvalera / code / Helenae /lib/python2.7/site-packages/flask_sqlalchemy/__in it__.py,第139行,在__init__
bind = db.engine,
文件/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py ,第780行,在引擎
中返回self.get_engine(self.get_app())
文件/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/flask_sqlalchemy/__init__ .py,第797行,在get_engine
返回connector.get_engine()
文件/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py ,第470行,在get_engine
self._sa.apply_driver_hacks(self._app,info,options)
文件/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/flask_sqlalchemy /__init__.py,第739行,在apply_driver_hacks
中,如果info.drivername.startswith('mysql'):
AttributeError:'Engine'对象没有属性'drivername'
$ b

导入 db_connection 并使用 db_connection.session code>而不是创建新的会话。


Im integrate Flask and SQLAlchemy in my application, but can understand, why at login page in getting big stacktrace. This errors now I'll taking after switching to Mac OS from Debian. All used libraries in virtuaelnv.

I have right now these things:
1) in flask_app.py:

from flask import Flask, request, session
from flask_sqlalchemy import SQLAlchemy
from db import tables as dbTables
from db.queries import engine as db_engine

app = Flask(__name__, template_folder='./web/templates/', static_folder='./web/static/', static_url_path='')
app.config['SECRET_KEY'] = 'some_secret_key'
app.config['SQLALCHEMY_DATABASE_URI'] = db_engine
db_connection = SQLAlchemy(app)

import web.admin
import web.views

if __name__ == "__main__":
    from web.admin import *
    from web.views import *
    app.run(port=8500, debug=True)

2) Its my queries.py, which contains this strings and code for taking some data from PostgreSQL DB:

import datetime
from hashlib import sha256
from time import gmtime, strftime

import sqlalchemy
import sqlalchemy.exc
from sqlalchemy import and_, func, asc
from sqlalchemy.orm import sessionmaker

from tables import File as FileTable
from tables import Users, FileServer, FileSpace, Catalog

engine = sqlalchemy.create_engine("postgresql://dev:developer@localhost/csan", pool_size=20, max_overflow=0)
Session = sessionmaker(bind=engine)

# and some queries for DB
# ...

3) And this stacktrace, after sending to http://localhost:8500/admin/login POST request:

AttributeError
AttributeError: 'Engine' object has no attribute 'drivername'

Traceback (most recent call last)
File "/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/flask_admin/base.py", line 62, in inner
return f(self, *args, **kwargs)
File "/Users/savicvalera/code/Helenae/Helenae/helenae/web/admin.py", line 42, in login_view
if helpers.validate_form_on_submit(form):
File "/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/flask_admin/helpers.py", line 47, in validate_form_on_submit
return is_form_submitted() and form.validate()
File "/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/wtforms/form.py", line 310, in validate
return super(Form, self).validate(extra)
File "/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/wtforms/form.py", line 152, in validate
if not field.validate(self, extra):
File "/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/wtforms/fields/core.py", line 200, in validate
stop_validation = self._run_validation_chain(form, chain)
File "/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/wtforms/fields/core.py", line 220, in _run_validation_chain
validator(form, self)
File "/Users/savicvalera/code/Helenae/Helenae/helenae/web/forms.py", line 19, in validate_login
user = get_user(self.login.data)
File "/Users/savicvalera/code/Helenae/Helenae/helenae/web/forms.py", line 11, in get_user
return db_connection.session.query(dbTables.Users).filter_by(name=user).first()
File "/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/sqlalchemy/orm/scoping.py", line 150, in do
return getattr(self.registry(), name)(*args, **kwargs)
File "/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/sqlalchemy/util/_collections.py", line 910, in __call__
return self.registry.setdefault(key, self.createfunc())
File "/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py", line 139, in __init__
bind=db.engine,
File "/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py", line 780, in engine
return self.get_engine(self.get_app())
File "/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py", line 797, in get_engine
return connector.get_engine()
File "/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py", line 470, in get_engine
self._sa.apply_driver_hacks(self._app, info, options)
File "/Users/savicvalera/code/Helenae/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py", line 739, in apply_driver_hacks
if info.drivername.startswith('mysql'):
AttributeError: 'Engine' object has no attribute 'drivername'

解决方案

You are creating a second session, in addition to the one Flask-SQLAlchemy already produces for you, and you are interfering with Flask-SQLAlchemy.

Import db_connection and use db_connection.session instead of creating a new session.

这篇关于“引擎”对象没有属性“drivername”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆