有没有办法filter在SQL Alchemy ORM中有条件地为查询添加参数?
例如,想象一下,我有以下几点:
q = session.query(X)
if a:
q.filter(X.y == 'a')
elif b:
q.filter(X.y == 'a', X.z == 'b')
elif c:
q.filter(X.y == 'a', X.p == 'd')
Run Code Online (Sandbox Code Playgroud)
有没有办法说只需添加
X.z == 'b' 如果 b
无需(X.y == 'a')在每个过滤器中读取.
好像我能做到
q.filter(X.y == 'a').filter(X.y == 'b')
但这会更改正在执行的查询.
func我目前使用SQLAlchemy并严重依赖
from sqlalchemy import func
不幸的是,我只知道
http://docs.sqlalchemy.org/en/rel_1_0/core/functions.html
就您可以使用的功能类型的文档而言。
例如,您可以使用func.timediffinMySQL但这没有记录(我相信)。我如何找到 的可能功能列表MySQL?我已经尝试过dir(func),但这似乎没有返回有用的结果。
在Flask-SQLAlchemy中,位于:
https://pythonhosted.org/Flask-SQLAlchemy/queries.html
您可以通过访问您的会话db.session.
如何通过db.session具有访问权限的会话
expire_on_commit=False
我尝试过,db.session.expire_on_commit = False但这并不适合生效.
我有以下代码块
class APITests(unittest.TestCase):
def setUp(self):
app.config['TESTING'] = True
self.app = app.test_client()
app.config['SECRET_KEY'] = 'kjhk'
def test_exn(self, query):
query.all.side_effect = ValueError('test')
rv = self.app.get('/exn/')
assert rv.status_code == 400
Run Code Online (Sandbox Code Playgroud)
我想检查 ) 的返回码self.app.get('/exn/。但是,我注意到query.all()将异常传播到测试用例,而不是捕获它并返回错误代码。
在 Flask 中抛出异常时,如何检查无效输入的返回码?
我正在使用Python 2.6.6。
我已将错误代码缩小到以下两类:
class Graph(object):
def __init__(self, name):
self.name = name
self.testme = 3
Run Code Online (Sandbox Code Playgroud)
和
class StepPlot(Graph):
def __init__(self, name):
print("fdasfdsf")
print(dir(super(Graph, self)))
super(Graph, self).__init__(name)
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我实例化StepPlotwith时StepPlot('fdsfa'),出现错误
TypeError: object.__init__() takes no parameters
难道它不能接受一个参数吗?
看着
什么时候调用Python的super().__init__()?
这个班级组织应该有效。
我从根本上错过了一些东西吗?任何帮助,将不胜感激。
我正在尝试patch我的烧瓶API中的方法,但似乎方法调用没有被替换.不app.test_client()这样做,我很想念在引擎盖下的东西.
例如,如果我跑
@patch('k.stats.mstats')
def test_ps(self, mstats):
mstats.return_value = (1, 2, 3)
rv = self.app.get('/ps/')
Run Code Online (Sandbox Code Playgroud)
我通过调试器运行到下面的点:
@app.route('/ps/', methods=['GET'])
def ps():
import pdb
pdb.set_trace()
mstats()
Run Code Online (Sandbox Code Playgroud)
并检查mstats,我将取回未被嘲笑的功能.
但是,如果我从k.stats import mstats断点运行,我会找回我正在寻找的模拟方法.
如何确保调用模拟方法?
如果我使用一个memoize装饰器,例如类似于:
https://wiki.python.org/moin/PythonDecoratorLibrary#Memoize
我是否需要担心内存不足和需要手动垃圾收集?例如,如果我有一个长时间运行的 Python 进程,它不断地记忆,我不需要确保dict它不会变得太大。不要memoize装饰通常也需要做高速缓存收回?
为什么这不是所有可以保持任意数量中间状态的装饰器的问题?
使用lru_cachefrom 会functools解决这个问题吗?
我使用的Click库,但我似乎无法找到类似行为dest的argparse.
例如,我有
@click.option('--format', type=click.Choice(['t', 'j']))
def plug(format):
pass
Run Code Online (Sandbox Code Playgroud)
请注意,我使用的标志--format被转换为内置的Python构造format,这是不理想的.
有没有办法更改传递给选项的click函数的参数?