我刚刚开始使用Flask进行编码,我想在我的应用程序中的小表单上设置CSRF.我正在关注此http://wtforms.readthedocs.org/en/2.0.2/csrf.html以进行基于会话的实施.我在网上浏览了一段时间以找到类似问题的解决方案,但我没有成功,如果这是一个重复的问题,请道歉.
这段代码的问题:
当我在虚拟环境中运行它时,我得到以下堆栈跟踪AttributeError: 'Request' object has no attribute 'POST'-
目标:在wtform实例上实现csrf
环境:wtf版本2.02,烧瓶0.10,venv与python 2.7
from flask import session, request
from flask.ext.wtf import Form
from wtforms import TextField, validators, SubmitField
from wtforms.validators import Required, Length
from wtforms.csrf.session import SessionCSRF
from datetime import timedelta
import config # my config file
# create super class
class MyForm(Form):
class Meta:
csrf = True
csrf_class = SessionCSRF
csrf_secret = config.secret_key
csrf_time_limit = timedelta(minutes=20)
@property
def csrf_context(self):
return request.session
# create a …Run Code Online (Sandbox Code Playgroud) 该瓶-SQLAlchemy的文档说,许多一对多查找表不应该继承db.Model而是被写成db.Tables。从文档:
如果要使用多对多关系,则需要定义用于该关系的帮助程序表。对于此辅助表,强烈建议不要使用模型,而是使用实际表
为什么?将所有内容制作为模型有哪些弊端?我认为采用统一的方式在数据库中声明表看起来更干净。同样,有可能以后某个时间,开发人员将需要直接访问那些映射记录,而不是通过需要模型的关系来访问。
我正在尝试使用 SQLAlchemy 建立与 PostgreSQL 数据库的连接,执行 SQL 查询并将文件的输出打印到 linux 中的文件。
from sqlalchemy import create_engine
import yaml
import csv
outfile = open('/path/filename.csv', 'wb')
outcsv = csv.writer(outfile, delimiter='\t')
with open('config.yml') as f:
cfg = yaml.safe_load(f)
username = cfg['credentials']['username']
password = cfg['credentials']['password']
host = cfg['credentials']['host']
port = cfg['credentials']['port']
dbname = cfg['credentials']['dbname']
engine = create_engine('postgresql://{}:{}@{}:{}/{}'.format(username, password, host, port, dbname))
result = engine.execute("""select * from db.tablename """)
# dump column titles (optional)
outcsv.writerow(x[0] for x in result.description)
# dump rows
outcsv.writerows(result.fetchall())
outfile.close()
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误消息 - 回溯(最近一次调用最后一次):文件“”,第 12 …
我想捕获特定的异常,例如UniqueViolationsqlalchemy 上的异常。
但 sqlalchemy 仅通过IntegrityError.
所以我用下面的代码捕获了特定的异常。
except sqlalchemy.exc.IntegrityError as e:
from psycopg2 import errors
if isinstance(e.orig, errors.UniqueViolation):
pass
elif isinstance(e.orig, errors.ForeignKeyViolation):
pass
Run Code Online (Sandbox Code Playgroud)
但看起来并不优雅。
我不想使用 if 语句只是捕获特定的异常名称。
有什么办法可以解决这个问题吗?
谢谢。
我偶尔会发现自己有一个表对象(例如由 检索Metadata.tables)并且想要获取 Mapper 对象,该对象定义了从某个用户定义的类到表的映射(然后最终是映射的类)
在上下文中,我有:
一个sqlalchemy.schema.Table对象;
一个sqlalchemy.schema.MetaData对象;
甲sqlalchemy.orm.session.Session表示当前会话对象。
我想要的是sqlalchemy.orm.mapper.Mapper定义用户定义的类和Table上面的对象之间的映射的对象。我找不到通过文档或检查这些对象及其可用方法来获取此信息的方法。有没有办法做到这一点?
我有以下模型,我想更改名称的长度,当我进行迁移时,它没有检测到更改
class Client(db.Model):
__tablename__ = "client"
client_id = db.Column(
db.Integer,
primary_key=True,
autoincrement=True
)
name = db.Column(db.String(65))
email = db.Column(db.String(255))
Run Code Online (Sandbox Code Playgroud)
例如更改为
name = db.Column(db.String(100))
NFO [alembic.env] No changes in schema detected.
但是当我更改名称时,如果它检测到更改
INFO [alembic.autogenerate.compare] Detected added column 'client.name_test'
INFO [alembic.autogenerate.compare] Detected removed column 'client.name'
Run Code Online (Sandbox Code Playgroud) 当尝试从作为实例属性的类继承时,就会出现问题。这个 mcve 重现了它,我将把下面问题的其余部分留给后代:
class A:
class SubA:
pass
a = A()
class B(a.SubA):
pass
Run Code Online (Sandbox Code Playgroud)
mypy输出:
Name 'a.SubA' is not defined
Run Code Online (Sandbox Code Playgroud)
这通过:
Name 'a.SubA' is not defined
Run Code Online (Sandbox Code Playgroud)
本相关问题中的示例几乎正是在命名空间Flask-SQLAlchemy下提供声明性基类的内容db。在该问题中,mypy维护者声称他们不会支持该模式。
我的问题是,上述模式有什么不正确以至于mypy不支持它?特别是在大型项目(例如Flask-SQLAlchemy.
此外,用户Flask-SQLAlchemy和mypy在项目中管理此内容的最佳方式是什么?
这个问题与缺少存根无关Flask-SQLAlchemy。接受这一点后,我遇到了这个问题。
请帮助我理解为什么以下内容不能按我的预期工作。
在我的环境中我只安装Flask-SQLAlchemy了mypy。
我已经mypy配置了ignore_missing_imports = True.
跳过mypy以下内容:
class A:
class SubA:
pass
class B(A.SubA):
pass
Run Code Online (Sandbox Code Playgroud)
揭示了:
error: Name 'db.Model' is not …Run Code Online (Sandbox Code Playgroud) 我想澄清一下 pre ping 功能如何与 SqlAlchemy 数据库池配合使用。假设我尝试使用数据库池对数据库进行 SQL 查询。如果数据库池发送预 ping 来检查连接并且连接断开,它是否会自动处理此问题?我所说的处理是指它重新连接然后发送 SQL 查询?或者我必须在我的代码中自己处理这个问题?
谢谢!
我遇到的烧瓶SQLAlchemy的一个问题,我可以设置对象的属性place_collections,但是当我想设置为对象属性的地方,发生了错误:
Traceback (most recent call last):
File "/Users/user/PycharmProjects/website/venv/lib/python3.6/site-packages/flask/app.py", line 2309, in __call__
return self.wsgi_app(environ, start_response)
File "/Users/user/PycharmProjects/website/venv/lib/python3.6/site-packages/werkzeug/contrib/fixers.py", line 152, in __call__
return self.app(environ, start_response)
File "/Users/user/PycharmProjects/website/venv/lib/python3.6/site-packages/flask/app.py", line 2295, in wsgi_app
response = self.handle_exception(e)
File "/Users/user/PycharmProjects/website/venv/lib/python3.6/site-packages/flask/app.py", line 1741, in handle_exception
reraise(exc_type, exc_value, tb)
File "/Users/user/PycharmProjects/website/venv/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/Users/user/PycharmProjects/website/venv/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/Users/user/PycharmProjects/website/venv/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/user/PycharmProjects/website/venv/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, …Run Code Online (Sandbox Code Playgroud) 所以基本上我已经收到这个flask_sqlachemy错误几个小时了,在网上尝试了多种解决方案但没有工作,尽管我是这种语言和框架的新手。sqlalchemy.exc.InvalidRequestError:已为此元数据实例定义表“treatments”。指定“extend_existing=True”以重新定义现有表对象上的选项和列。
这是我的 main.py
# main.py
from app import app
from db_setup import init_db, db_session
from forms import VisitSearchForm, TreatmentForm, PatientForm
from flask import flash, render_template, request, redirect
from models import Treatment, Visit, init_db, Patient
from tables import Results
from app import db
init_db()
@app.route('/', methods=['GET', 'POST'])
def index():
search = VisitSearchForm(request.form)
if request.method == 'POST':
return search_results(search)
return render_template('index.html', form=search)
@app.route('/results')
def search_results(search):
results = []
search_string = search.data['search']
if search.data['search'] == '':
qry = db_session.query(Treatment, Patient)
results = qry.all() …Run Code Online (Sandbox Code Playgroud) python ×10
sqlalchemy ×7
alembic ×1
flask ×1
mypy ×1
orm ×1
postgresql ×1
typechecking ×1
wtforms ×1