我是sqlalchemy的新手,我正在努力实现模型字段的简单验证,如Django ORM(整数,电子邮件的最小值和最大值,......)所提供的.SQLAlchemy可以开箱即用吗?顺便说一句,我正在使用SQLAlchemy和Flask.
我有一个postgres数据库,看起来像这样:
Table "public.entities"
Column | Type | Modifiers
---------------+-----------------------------+------------------------------------------------
id | bigint | not null default nextval('guid_seq'::regclass)
type_id | smallint | not null
name | character varying |
Indexes:
"entities_pkey" PRIMARY KEY, btree (id)
Foreign-key constraints:
"entities_parent_id_fkey" FOREIGN KEY (parent_id) REFERENCES entities(id)
"entities_type_id_fkey" FOREIGN KEY (type_id) REFERENCES entity_types(id)
Referenced by:
TABLE "posts" CONSTRAINT "posts_id_fkey" FOREIGN KEY (id) REFERENCES entities(id)
TABLE "posts" CONSTRAINT "posts_subject_1_fkey" FOREIGN KEY (subject_1) REFERENCES entities(id)
TABLE "posts" CONSTRAINT "posts_subject_2_fkey" FOREIGN KEY (subject_2) REFERENCES entities(id)
Table "public.posts"
Column …Run Code Online (Sandbox Code Playgroud) 我已经在WTF表格上挣扎了很长一段时间了.但是这个错误,似乎永远不会消失.我什么时候尝试运行此代码,表单永远不会验证
意见:
@bundle.route('/content/add/', methods=['GET', 'POST'])
@bundle.route('/content/add', methods=['GET', 'POST'])
@bundle.route('/content/edit/<posturl>/', methods=['GET', 'POST'])
@bundle.route('/content/edit/<posturl>', methods=['GET', 'POST'])
@fas_login_required
def addcontent(posturl=None):
form = CreateContent()
form_action = url_for('content.addcontent')
if posturl is not None:
content = Content.query.filter_by(slug=posturl).first_or_404()
form = CreateContent(obj=content)
if form.slug.data == posturl and request.method == 'POST' and form.validate():
form.populate_obj(content)
db.session.commit()
return redirect(url_for('content.addcontent',
posturl=posturl, updated="True"))
else:
if request.method == 'POST' and form.validate():
query = Content(form.title.data,
form.slug.data,
form.description.data,
form.media_added_ids.data,
form.active.data,
form.tags.data,
g.fas_user['username'],
form.type_content.data
)
try:
db.session.add(query)
db.session.commit()
# Duplicate entry
except Exception as e:
return str(e) …Run Code Online (Sandbox Code Playgroud) 当我使用sqlacodegen创建models.py我无法使用时User.query,收到警告"[AttributeError:type object'User '没有属性'query']".我认为db.query是一个非常有用的属性,它在SQLAlchemy()中使用:
db = SQLAlchemy()
Run Code Online (Sandbox Code Playgroud)
但我需要使用sqlacodegen为我们系统中的现有表创建模型.创建代码如下:
models.py
# coding: utf-8
from sqlalchemy import Column, Date, Float, Integer, String, Table, text
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
metadata = Base.metadata
class User(Base):
__tablename__ = u'users'
id = Column(Integer, primary_key=True)
email = Column(String(64))
username = Column(String(64))
role_id = Column(Integer)
password_hash = Column(String(128))
Run Code Online (Sandbox Code Playgroud)
现在我导入models.py:
from models import *
@main.route('/', methods=['GET', 'POST'])
def index():
form = NameForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.name.data).first()
...
Run Code Online (Sandbox Code Playgroud)
当我运行时,给出的警告是:
AttributeError: type object 'User' has no …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用SQLAlchemy针对'用户'和'角色'模型设置flask-admin模型视图。我得到的不是功能管理员视图:
ValueError: Invalid model property name <class 'app.models.Role'>.desc
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
Traceback (most recent call last):
File "/Users/dbg/Projects/Python/Current/ziff/flaskbase/manage.py", line 18, in <module>
app = create_app(os.getenv('APP_CONFIG') or 'default')
File "/Users/dbg/Projects/Python/Current/ziff/flaskbase/app/__init__.py", line 49, in create_app
admin.add_view(RoleAdmin(Role, db.session))
File "/usr/local/share/anaconda/envs/flaskbase27/lib/python2.7/site-packages/Flask_Admin-1.0.9-py2.7.egg/flask_admin/contrib/sqla/view.py", line 288, in __init__
menu_icon_value=menu_icon_value)
File "/usr/local/share/anaconda/envs/flaskbase27/lib/python2.7/site-packages/Flask_Admin-1.0.9-py2.7.egg/flask_admin/model/base.py", line 570, in __init__
self._refresh_cache()
File "/usr/local/share/anaconda/envs/flaskbase27/lib/python2.7/site-packages/Flask_Admin-1.0.9-py2.7.egg/flask_admin/model/base.py", line 640, in _refresh_cache
self._refresh_forms_cache()
File "/usr/local/share/anaconda/envs/flaskbase27/lib/python2.7/site-packages/Flask_Admin-1.0.9-py2.7.egg/flask_admin/model/base.py", line 580, in _refresh_forms_cache
self._create_form_class = self.get_create_form()
File "/usr/local/share/anaconda/envs/flaskbase27/lib/python2.7/site-packages/Flask_Admin-1.0.9-py2.7.egg/flask_admin/model/base.py", line 856, in get_create_form
return self.get_form()
File "/usr/local/share/anaconda/envs/flaskbase27/lib/python2.7/site-packages/Flask_Admin-1.0.9-py2.7.egg/flask_admin/model/base.py", line 848, in …Run Code Online (Sandbox Code Playgroud) 我正在研究一个项目(不是任何合作项目,学术)我在使用其登录时的危险和登录管理器时遇到了麻烦.
我创建了一个注册表单.输入我的名字电子邮件和密码然后当我重新启动服务器时,我得到了这个:
```
itsdangerous.BadTimeSignature
BadTimeSignature: Signature 'GAMjfzQpbKlPraWesdT49W40pA8' does not match
```
Run Code Online (Sandbox Code Playgroud)
错误的流程是这样的:
return render_template('index.html')
ctx.app.update_template_context(context)
context.update(func())
return dict(current_user=_get_user())
current_app.login_manager._load_user()
return self._load_from_cookie(request.cookies[cookie_name])
user = self.token_callback(cookie)
line 93, in load_token
data = login_serializer.loads(token, max_age=max_age)
.unsign(s, max_age, return_timestamp=True)
in unsign
date_signed=timestamp)
BadTimeSignature: Signature 'GAMjfzQpbKlPraWesdT49W40pA8' does not match
Run Code Online (Sandbox Code Playgroud)
问题的根源在主应用程序运行文件中:
line 93, in load_token
data = login_serializer.loads(token, max_age=max_age)
@login_manager.token_loader
def load_token(token):
max_age = app.config["REMEMBER_COOKIE_DURATION"].total_seconds()
#decrypt token
data = login_serializer.loads(token, max_age=max_age)
user = find-and-get-user-object(data)
if user:
if data[2] == users password: return user object
return None …Run Code Online (Sandbox Code Playgroud) 看看这个答案:Case Insensitive Flask-SQLAlchemy Query
为什么使用SQLAlchemy func.lower(mystring)而不是python的本机更好mystring.lower()?
我试图将我的flask应用程序连接到我的prostgreSQL数据库,并且找到了这个配置示例(下面的代码)。我只是不知道如何找到我的postgreSQL URI
app = Flask(__name__)
#how do i know my postgresql URI
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://localhost/pre-registration'
db = SQLAlchemy(app)
Run Code Online (Sandbox Code Playgroud) 我有一个使用SQLAlechemy的烧瓶应用程序的Flask-Admin界面,我似乎无法弄清楚如何处理外键.具体来说,我有以下两种模式:
class DoctorType(db.Model):
__tablename__ = 'doctor_type'
id = db.Column(db.Integer, primary_key=True)
doctor_type_english_name = db.Column(db.Unicode(255))
doctors = db.relationship('Doctor')
def __unicode__(self):
return self.doctor_type_english_name
class Doctor(db.Model):
__tablename__ = 'doctor'
id = db.Column(db.Integer, primary_key=True)
doctor_english_name = db.Column(db.Unicode(255))
doctor_type_id = db.Column(db.Integer, db.ForeignKey('doctor_type.id'))
def __unicode__(self):
return self.doctor_english_name
Run Code Online (Sandbox Code Playgroud)
我想创建或编辑flask-admin形式的doctor_type_id字段是doctor_type_english_name的下拉列表,而不是像这样的整数输入:
我__unicode__在模型上有函数(我使用的是python 2.7).我尝试在自定义表单视图中修改form_ajax_refs但没有成功.任何帮助将非常感激!
我有一个运行mysql数据库的网站使用sql-alchemy包突然崩溃了.我做了一些研究,发现预期的问题是最新的sql-alchemy更新正在向flask-admin交付一个比预期更多的值
"cls, key = identity_key(instance=obj)"
Run Code Online (Sandbox Code Playgroud)
来源
建议的修复是编辑文件以接受第三个项目,但我无法使用我在环境中的权限执行此操作.
另一个答案链接到github上的回购,但我无法弄清楚这对我有什么帮助.我对此非常陌生,我不知道是否应该克隆回购或者如果我是这样做的话.
任何帮助表示赞赏!
这是错误转储
2018-01-22 20:01:59,593:[2018-01-22 20:01:59,592]应用程序中的错误:/ reservation/add [GET]
2018-01-22 20:01:59,594:Traceback(大多数情况下)最近的呼叫最后):
2018-01-22 20:01:59,594:
文件"fakepath/flask/app.py",1982年,在wsgi_app 2018-01-22
20:01:59,594:response = self.full_dispatch_request() 2018年1月22日20:01:59594:文件"fakepath /烧瓶/ app.py",线1614,在full_dispatch_request
2018年1月22日20:01:59594:RV = self.handle_user_exception(E)
2018-01- 22 20:01:59,595:文件"fakepath/flask/app.py",第1517行,在handle_user_exception2018-01-22 20:01:59,595:reraise(exc_type,exc_value,tb)2018-01-22 20:01: 59,595:文件"fakepath/flask/_compat.py",第33行,重新加入
2018-01-22 20:01:59,595:提升值2018-01-22 20:01:59,595:文件"fakepath/flask/app.py ",第1612行,在full_dispatch_request中2018-01-22
20:01:59,595:rv = self.dispatch_request()2018-01-22
20:01:59,596:文件"fakepath/flask/app.py",第1598行,在dispatch_request2018-01-22 20:01:59,596:return self.view_functionsrul e.endpoint 2018-01-22
20:01:59,596:文件"fakepath/flask_login/utils.py",第261行,在decorated_view
2018-01-22 20:01:59,596:return func(*args,**kwargs )
2018-01-22 20:01:59,597:文件"/home/apoalphagammawebmaster/inventory/app/auth/views.py",第248行,在add_reservation中2018-01-22
20:01:59,597:form = form, title ='Add Reservation')
2018-01-22 20:01:59,597:文件"fakepath/flask/templating.py",第134行,在render_template2018-01-22 20:01:59,597:context,ctx.app)
2018-01-22 20:01:59,597:文件"fakepath/flask/templating.py",第116行,在_render 2018-01-22
20:01:59,597:rv = template.render(context)
2018-01- 22 20:01:59,598:文件"fakepath/jinja2/asyncsupport.py",第76行,渲染
2018-01-22 20:01:59,598:return original_render(self,*args,**kwargs)2018-01- 22 20:01:59598:文件"fakepath/Jinja2的/ environment.py",线路1008,在渲染
2018年1月22日20:01:59598:返回self.environment.handle_exception(exc_info,真) …
flask-sqlalchemy ×10
python ×10
flask ×5
sqlalchemy ×5
flask-admin ×2
postgresql ×2
cookies ×1
flask-login ×1
mysql ×1
sql ×1
wtforms ×1