小编Val*_*yal的帖子

使用session.query通过SQLAlchemy ORM更新连接表

使用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来指定连接条件,但没有解决问题.如何强制使用这个简单的更新语句来进行正确的连接?

python mysql sqlalchemy

9
推荐指数
2
解决办法
4616
查看次数

Pandas - 用空的python dict对象替换DataFrame中的所有NaN值

我有一个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?

python pandas

8
推荐指数
2
解决办法
4018
查看次数

在Python/Django中设置所有记录器的全局最小日志记录级别

在调用我的应用程序时,我希望能够(从配置或命令行或环境变量)读入所有记录器中的最小日志记录级别,然后全局设置日志记录模块以尊重此MIN_LOGGING_LEVEL.

例如,像这样的东西(不存在): logging.setLevel(logging.INFO)

我知道我可以在记录器和处理程序上单独设置日志记录级别,并为处理程序创建过滤器以尊重DEBUG标志之类的内容.但是,我真正想要的是能够在调用时更改所有记录器的最小日志级别(例如,取决于环境).

我是否必须自己滚动并在运行时动态构造配置才能实现此目的?或者有没有更好的方式或模式,我没有看到?

python django logging

6
推荐指数
1
解决办法
2599
查看次数

标签 统计

python ×3

django ×1

logging ×1

mysql ×1

pandas ×1

sqlalchemy ×1