使用MySQL,我想生成这个SQL:
UPDATE tableA
INNER JOIN tableB
ON tableA.some_id = tableB.some_id
SET tableA.foo = 1
WHERE tableB.bar IN ('baz','baaz')
Run Code Online (Sandbox Code Playgroud)
这是我的SQLAlchemy查询:
session.query(tableA).join(tableB, tableA.some_id == tableB.some_id) \
.filter(tableB.bar.in_(['baz','baaz']))\
.update({tableA.foo: 1})
Run Code Online (Sandbox Code Playgroud)
但它生成的SQL是这样的(多表更新,没有连接条件,这不是我想要的):
UPDATE tableA, tableB
SET tableA.foo = 1
WHERE tableB.bar IN ('baz','baaz')
Run Code Online (Sandbox Code Playgroud)
我已经尝试将.join更改为另一个.filter来指定连接条件,但没有解决问题.如何强制使用这个简单的更新语句来进行正确的连接?
我有一个pandas DataFrame,其中每个单元格都包含一个python dict.
>>> data = {'Q':{'X':{2:2010}, 'Y':{2:2011, 3:2009}},'R':{'X':{1:2013}}}
>>> frame = DataFrame(data)
>>> frame
Q R
X {2: 2010} {1: 2013}
Y {2: 2011, 3: 2009} NaN
Run Code Online (Sandbox Code Playgroud)
我想用空的dict替换NaN来获得这个结果:
Q R
X {2: 2010} {1: 2013}
Y {2: 2011, 3: 2009} {}
Run Code Online (Sandbox Code Playgroud)
但是,因为fillna函数将空字典解释为标量值而不是作为列 - >值的映射,如果我只是这样做(即它不起作用),它就不会这样做:
>>> frame.fillna(inplace=True, value={})
Q R
X {2: 2010} {1: 2013}
Y {2: 2011, 3: 2009} NaN
Run Code Online (Sandbox Code Playgroud)
有没有办法用来fillna完成我想要的东西?我是否必须遍历整个DataFrame或构建一个愚蠢的dict,并将所有列映射到空dict?
在调用我的应用程序时,我希望能够(从配置或命令行或环境变量)读入所有记录器中的最小日志记录级别,然后全局设置日志记录模块以尊重此MIN_LOGGING_LEVEL.
例如,像这样的东西(不存在): logging.setLevel(logging.INFO)
我知道我可以在记录器和处理程序上单独设置日志记录级别,并为处理程序创建过滤器以尊重DEBUG标志之类的内容.但是,我真正想要的是能够在调用时更改所有记录器的最小日志级别(例如,取决于环境).
我是否必须自己滚动并在运行时动态构造配置才能实现此目的?或者有没有更好的方式或模式,我没有看到?