我发现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."
sort(already_sorted_list)Python 的复杂性是什么?Python会检查给定的iterable是否已排序,或者我是否必须自己完成?我无法在文档中的任何地方找到它.
将现有Google云存储存储桶移至另一个项目的最佳方法是什么?
我不想将其复制到Google Cloud Storage外部进行传输,拥有两份数据副本或使用其他存储桶名称.
我能达到这些要求的距离有多近?
我需要像执行查询一样
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 /任何线索吗?
我想一次执行多个 SELECT 语句,就像我所做的那样
echo "SELECT * FROM x; SELECT * FROM y;" | psql
Run Code Online (Sandbox Code Playgroud)
这样我只需向数据库发送一次内容,并立即收到所有结果。
用 SQLAlchemy 来做这件事是完美的,但它似乎不受支持(不是吗?)。
我想我可能会重新实现 SQLAlchemy 的某些部分来获得该功能,但我也没有在 psycopg2 中找到此问题的解决方案 - 执行用分号分隔的两个查询仅给出最后一个查询的结果。
那么,是否可以使用 SQLAlchemy(这将是完美的)或 psycopg2(这也将是好的)来做到这一点?
下面是两个定义的函数,用于查找数字列表的最大值.
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) 我想知道这个算法的时间复杂度,它用于使用另一个堆栈对堆栈进行排序.我认为它是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
在 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) 我有一个名为"成人"的数据帧
> 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()函数来处理我的数据帧.我应该使用其他一些应用相关的功能吗?
谢谢!
有没有办法等待多个期货,并在它们按给定顺序完成时从中产生收益?
假设您有两个数据源。一个为您提供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 ×5
sql ×3
sqlalchemy ×3
algorithm ×2
postgresql ×2
sorting ×2
apply ×1
bash ×1
bigdata ×1
fish ×1
haskell ×1
performance ×1
psycopg2 ×1
r ×1
shell ×1