小编Bar*_*ski的帖子

SQLAlchemy和空IN子句

我发现SQLAlchemy翻译了

db.query(...).filter(A.id.in_(ids))
Run Code Online (Sandbox Code Playgroud)

SELECT ...
FROM a
WHERE a.id != a.id
Run Code Online (Sandbox Code Playgroud)

如果ids是空的 这导致在a桌面上进行顺序扫描,这对性能来说显然是灾难性的.

第一个问题是:为什么?为什么不只是1 = 0或任何不需要顺序扫描?

第二个,更重要的是:是否有一个常用的解决方法(除了if几乎每个in_)?

我想这in_不能轻易地重新实现,以涵盖所有情况而不会导致这个问题,但我不能成为第一个面对它,可能有一些解决方案涵盖简单,常见的用例in_.

编辑

SQLAlchemy每次发生时都会记录一条警告:

"The IN-predicate on 'foo.bar' was invoked with an empty sequence. This results in a contradiction, which nonetheless can be expensive to evaluate. Consider alternative strategies for improved performance."

python sql sqlalchemy

24
推荐指数
3
解决办法
7207
查看次数

Python在排序列表上排序复杂性

sort(already_sorted_list)Python 的复杂性是什么?Python会检查给定的iterable是否已排序,或者我是否必须自己完成?我无法在文档中的任何地方找到它.

python sorting

10
推荐指数
1
解决办法
5313
查看次数

将Google Cloud Storage存储桶移至另一个项目

将现有Google云存储存储桶移至另一个项目的最佳方法是什么?

我不想将其复制到Google Cloud Storage外部进行传输,拥有两份数据副本或使用其他存储桶名称.

我能达到这些要求的距离有多近?

bigdata google-cloud-storage

10
推荐指数
3
解决办法
3140
查看次数

SQLAlchemy:更新from_select

我需要像执行查询一样

UPDATE node
SET node.parent_id = node_node.parent_id,
    node.label = node_node.label
FROM node_node
WHERE node_node.child_id = node_id
Run Code Online (Sandbox Code Playgroud)

使用SQLAlchemy.我确实搜索了文档insert().from_select(),但只找到了,但没有update().from_select().我知道我可以以编程方式实现相同的目标,但我需要它尽可能快.

可能吗?你能给我一个例子或链接到docs /任何线索吗?

python sql postgresql sqlalchemy

9
推荐指数
1
解决办法
3546
查看次数

Psycopg2 或 SQLAlchemy 中的多个 SELECT

我想一次执行多个 SELECT 语句,就像我所做的那样

echo "SELECT * FROM x; SELECT * FROM y;" | psql
Run Code Online (Sandbox Code Playgroud)

这样我只需向数据库发送一次内容,并立即收到所有结果。

用 SQLAlchemy 来做这件事是完美的,但它似乎不受支持(不是吗?)。

我想我可能会重新实现 SQLAlchemy 的某些部分来获得该功能,但我也没有在 psycopg2 中找到此问题的解决方案 - 执行用分号分隔的两个查询仅给出最后一个查询的结果。

那么,是否可以使用 SQLAlchemy(这将是完美的)或 psycopg2(这也将是好的)来做到这一点?

python sql postgresql sqlalchemy psycopg2

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

非尾递归函数表现不佳的实例

下面是两个定义的函数,用于查找数字列表的最大值.

mx :: (Ord a) => [a] -> a
mx [] = error "Empty list"
mx [x] = x
mx (x:xs) 
    | x > (mx xs) = x
    | otherwise = (mx xs)

mx' (x:xs) = findMax x xs
  where
    findMax cmx [] = cmx
    findMax cmx (x:xs) | x > cmx = findMax x xs
               | otherwise = findMax cmx xs

main = do 
    print $ mx [1..30]
Run Code Online (Sandbox Code Playgroud)

定时上面的代码,首先是mx'(尾递归),然后是mx(非尾递归),我们有以下时序.

Lenovo-IdeaPad-Y510P:/tmp$ time ./t 
30

real    0m0.002s
user    0m0.000s
sys 0m0.001s …
Run Code Online (Sandbox Code Playgroud)

algorithm haskell time-complexity

6
推荐指数
3
解决办法
177
查看次数

使用另一个堆栈对堆栈进行排序

我想知道这个算法的时间复杂度,它用于使用另一个堆栈对堆栈进行排序.我认为它是O(N ^ 2),但显然它看起来不止于此.

public static Stack<Integer> sort(Stack<Integer> s) {
    Stack<Integer> r = new Stack<Integer>();

    while(!s.isEmpty()) {
        int tmp = s.pop();
        while(!r.isEmpty() && r.peek() > tmp) {
            s.push(r.pop());
        }
        r.push(tmp);
    }
    return r;
}
Run Code Online (Sandbox Code Playgroud)

sorting algorithm performance complexity-theory time-complexity

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

Bash 中 &lt;&lt;EOF 的 Fish 等价物是什么

在 Bash 中,<< 的 Fish 等价物是什么,如

$ nc localhost 8888 << EOF
> foo
> EOF
Run Code Online (Sandbox Code Playgroud)

在 Fish 中,它崩溃了

> nc localhost 8888 << EOF
fish: Expected redirection specification, got token of type 'Redirect input to file'
nc localhost 8888 << EOF
               ^
Run Code Online (Sandbox Code Playgroud)

bash shell fish

6
推荐指数
2
解决办法
2743
查看次数

为什么apply()不适用于R中的数据帧?

我有一个名为"成人"的数据帧

> str(adult[, 1:2)
'data.frame':   32561 obs. of  15 variables:
 $ age      : int  39 50 38 53 28 37 49 52 31 42 ...
 $ worktp   : Factor w/ 9 levels " ?"," Federal-gov",..: 8 7 5 5 5 5 5 7 5 5 ...

> is.factor(adult[,1])
[1] FALSE

> is.factor(adult[,2])
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

一切顺利,直到我使用

> apply(adult[,1:2], 2, function(x) is.factor(x))
age worktp 
FALSE  FALSE 
Run Code Online (Sandbox Code Playgroud)

为什么我在worktp上得到FALSE,其中is.factor()只是给了我真的?我真的需要这个apply()函数来处理我的数据帧.我应该使用其他一些应用相关的功能吗?

谢谢!

r apply

5
推荐指数
1
解决办法
746
查看次数

Python asyncio:as_completed按顺序

长话短说

有没有办法等待多个期货,并在它们按给定顺序完成时从中产生收益?

很长的故事

假设您有两个数据源。一个为您提供id -> name映射,另一个为您提供id -> age映射。你想要计算(name, age) -> number_of_ids_with_that_name_and_age.

数据太多,无法直接加载,但是两个数据源都支持分页/迭代和排序id

所以你写类似的东西

def iterate_names():
    for page in get_name_page_numbers():
        yield from iterate_name_page(page)  # yields (id, name) pairs
Run Code Online (Sandbox Code Playgroud)

对于年龄也是如此,然后你迭代iterate_names()iterate_ages()

这有什么问题吗?发生的情况是:

  • 您请求一页姓名和年龄
  • 你得到他们
  • 您处理数据直到到达页面末尾,比方说,年龄
  • 您请求另一页年龄
  • 您处理数据直到...

基本上,您在处理数据时不会等待任何请求。

您可以用来asyncio.gather发送所有请求并等待所有数据,但是:

  • 当第一页到达时,您仍在等待其他页面
  • 你内存不足了

asyncio.as_completed允许您在获得结果时发送所有请求并处理页面,但是您将获得无序的页面,因此您将无法进行处理。

理想情况下,会有一个函数发出第一个请求,当响应到来时,发出第二个请求并同时从第一个请求中产生结果。

那可能吗?

python python-asyncio

4
推荐指数
1
解决办法
6715
查看次数