小编ira*_*ira的帖子

使用ON CONFLICT从INSERT返回行而无需更新

我有一种情况,我经常需要从具有唯一约束的表中获取一行,如果不存在,则创建它并返回.例如我的表可能是:

CREATE TABLE names(
    id SERIAL PRIMARY KEY,
    name TEXT,
    CONSTRAINT names_name_key UNIQUE (name)
);
Run Code Online (Sandbox Code Playgroud)

它包含:

id | name
 1 | bob 
 2 | alice
Run Code Online (Sandbox Code Playgroud)

然后我想:

 INSERT INTO names(name) VALUES ('bob')
 ON CONFLICT DO NOTHING RETURNING id;
Run Code Online (Sandbox Code Playgroud)

也许:

 INSERT INTO names(name) VALUES ('bob')
 ON CONFLICT (name) DO NOTHING RETURNING id
Run Code Online (Sandbox Code Playgroud)

让它返回bob的id 1.但是,RETURNING只返回插入或更新的行.所以,在上面的例子中,它不会返回任何东西.为了让它按照需要运行,我实际上需要:

INSERT INTO names(name) VALUES ('bob') 
ON CONFLICT ON CONSTRAINT names_name_key DO UPDATE
SET name = 'bob'
RETURNING id;
Run Code Online (Sandbox Code Playgroud)

这看起来有点麻烦.我想我的问题是:

  1. 不允许(我)期望行为的原因是什么?

  2. 有没有更优雅的方式来做到这一点?

sql postgresql upsert postgresql-9.5

16
推荐指数
1
解决办法
3961
查看次数

何时使用张量流数据集api与pandas或numpy

我已经看到了很多关于使用LSTM进行张量流时间序列的指南,但我仍然不确定当前读取和处理数据的最佳实践 - 特别是当人们应该使用tf.data.DatasetAPI时.

在我的情况下,我有一个文件data.csv与我features,并希望做以下两个任务:

  1. 计算目标 - 目标时间t是某个范围内某些列的百分比变化,即

    labels[i] = features[i + h, -1] / features[i, -1] - 1
    
    Run Code Online (Sandbox Code Playgroud)

    我想h在这里成为一个参数,所以我可以尝试不同的视野.

  2. 滚动窗口 - 出于培训目的,我需要将我的功能滚动到长度为的窗口window:

    train_features[i] = features[i: i + window]
    
    Run Code Online (Sandbox Code Playgroud)

我很乐意使用pandas或构建这些对象numpy,所以我不会问如何实现这一点 - 我的问题是具体应该是什么样的管道tensorflow.

编辑:我想我也想知道我列出的2个任务是否适合数据集api,或者我最好使用其他库来处理它们?

csv preprocessor tensorflow tensorflow-datasets

11
推荐指数
1
解决办法
2777
查看次数

在f#中捕获print语句

我想知道是否有一种很好的方法来定义一个函数captureOutput,该函数接受一个f可能包含print语句的函数并返回f打印的内容.例如,

let f x = print "%s" x
let op = captureOutput (f "Hello World")

val op : string = "Hello World"
Run Code Online (Sandbox Code Playgroud)

我在想,或许有一种很好的方法可以异步地做到这一点,Console.ReadLine()但我还没有能够解决任何问题.

干杯

编辑:

根据Fyodor Soikin的评论,下面的代码做了我想要的:

let captureOutput f x =
    let newOut = new IO.StringWriter()
    Console.SetOut(newOut)
    f x
    Console.SetOut(Console.Out)
    newOut.ToString()
Run Code Online (Sandbox Code Playgroud)

f#

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

查询可选参数

假设我有一个带有年龄和名称列的用户表.我想写一个函数来查询这个表,要么选择所有内容,要么根据年龄进行选择.天真,我可能会这样做

def query(age=''):
    query_args = ' WHERE {}'.format(age) if age else ''
    db.execute('SELECT * FROM users' + query_args)
Run Code Online (Sandbox Code Playgroud)

显然这是一个可怕的想法,但我不确定处理这种情况的更好方法是 - 如果将年龄作为参数传递或者不是,那么编写单独的查询似乎非常难看,尤其是在更复杂的示例中我可能有多个查询参数.

python postgresql psycopg2

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