postgresql - postgres 返回 id 或选择 currval(pg_get_serial_sequence('',''))?
我正在尝试使用 Dapper、Npgsql 从 .net 应用程序连接到 postgres 数据库。插入后,我想知道插入行的 id。我已阅读并尝试过此处讨论的
问题描述
我正在尝试使用 Dapper、Npgsql 从 .net 应用程序连接到 postgres 数据库。插入后,我想知道插入行的 id。我已阅读并尝试过此处讨论的选项。我试过returning id
这样使用:
id = connection.Execute("insert into document_tag (tag) values (@tag) returning id;",
new { tag },
transaction);
但我在 id 中只得到“1”。
我也尝试currval
像这样使用:
id = connection.Execute("insert into document_tag (tag) values (@tag); select currval(pg_get_serial_sequence('document_tag','id'));",
new { tag },
transaction);
即使在这种情况下,我在id
.
在这两种情况下,插入都是成功的,并且数据库中的id列具有除“1”之外的有效序列号。
我的期望是错误的还是有替代方案?
根据来自另一个数据帧的查找值创建一个 pandas 列
我有一个 pandas 数据框,它按小时有一些数据值(这也是index
这个查找数据框的)。数据框如下所示:
In [1] print (df_lookup)
Out[1] 0 1.109248
1 1.102435
2 1.085014
3 1.073487
4 1.079385
5 1.088759
6 1.044708
7 0.902482
8 0.852348
9 0.995912
10 1.031643
11 1.023458
12 1.006961
...
23 0.889541
我想将此查找数据帧中的值相乘以创建另一个数据帧的列,该数据帧以日期时间为索引。数据框如下所示:
In [2] print (df)
Out[2]
Date_Label ID data-1 data-2 data-3
2015-08-09 00:00:00 1 2513.0 2502 NaN
2015-08-09 00:00:00 1 2113.0 2102 NaN
2015-08-09 01:00:00 2 2006.0 1988 NaN
2015-08-09 02:00:00 3 2016.0 2003 NaN
...
2018-07-19 23:00:00 33 3216.0 333 NaN
我想data-3
从列计算data-2
列,其中赋予“data-2”列的权重取决于 df_lookup 中的相应值。我通过如下循环索引来获得所需的值,但这太慢了:
for idx in df.index:
df.loc[idx,'data-3'] = df.loc[idx, 'data-2']*df_lookup.at[idx.hour]
有人可以建议更快的方法吗?
解决方案
要插入一行并取回数据库生成的列,请使用:
INSERT INTO document_tag (tag) VALUES (@tag) RETURNING id
请注意,“RETURNING”之前没有分号 - 它只是 INSERT 语句的一个子句,正如您在 PostgreSQL 文档中看到的那样。
此外,一旦添加了 RETURNING 子句,INSERT 语句就会返回一个包含所请求信息的结果集,就像执行 SELECT 语句一样。Dapper 的Execute()
目的是在没有结果集的情况下执行,因此您需要切换到Query()
,并且可能添加一个Single()
方法来提取您需要的单个值。另一种选择是ExecuteScalar()
.
推荐阅读
- spring-boot - Spring Boot 读取超时问题(SocketTimeoutException)
- javascript - 循环遍历集合中的所有文档和每个文档中的数组以将数组值与项目匹配
- ios - 来自 swift 应用程序的 HTTP 响应的尾随 Nil
- asp.net - DbContext 依赖注入问题 - System.ObjectDisposedException:无法访问已处置的对象
- dart - 有没有办法从firestore Stream创建一个全局变量
更新自己? - python - 在大熊猫中添加 2262 年之后的时间
- python - 如何从解析的文本中获得查询的答案?
- linux - 是否有“我是谁”和“登录名”的简单替代方法?
- apache-flink - 如何使用 Apache Flink Table API 对整个表进行排序
- json - Neo4j:循环从 Cypher 中的 apoc.load.json 生成的地图
我正在尝试使用 Dapper、Npgsql 从 .net 应用程序连接到 postgres 数据库。插入后,我想知道插入行的 id。我已阅读并尝试过此处讨论的
问题描述
我正在尝试使用 Dapper、Npgsql 从 .net 应用程序连接到 postgres 数据库。插入后,我想知道插入行的 id。我已阅读并尝试过此处讨论的选项。我试过returning id
这样使用:
id = connection.Execute("insert into document_tag (tag) values (@tag) returning id;",
new { tag },
transaction);
但我在 id 中只得到“1”。
我也尝试currval
像这样使用:
id = connection.Execute("insert into document_tag (tag) values (@tag); select currval(pg_get_serial_sequence('document_tag','id'));",
new { tag },
transaction);
即使在这种情况下,我在id
.
在这两种情况下,插入都是成功的,并且数据库中的id列具有除“1”之外的有效序列号。
我的期望是错误的还是有替代方案?
根据来自另一个数据帧的查找值创建一个 pandas 列
我有一个 pandas 数据框,它按小时有一些数据值(这也是index
这个查找数据框的)。数据框如下所示:
In [1] print (df_lookup)
Out[1] 0 1.109248
1 1.102435
2 1.085014
3 1.073487
4 1.079385
5 1.088759
6 1.044708
7 0.902482
8 0.852348
9 0.995912
10 1.031643
11 1.023458
12 1.006961
...
23 0.889541
我想将此查找数据帧中的值相乘以创建另一个数据帧的列,该数据帧以日期时间为索引。数据框如下所示:
In [2] print (df)
Out[2]
Date_Label ID data-1 data-2 data-3
2015-08-09 00:00:00 1 2513.0 2502 NaN
2015-08-09 00:00:00 1 2113.0 2102 NaN
2015-08-09 01:00:00 2 2006.0 1988 NaN
2015-08-09 02:00:00 3 2016.0 2003 NaN
...
2018-07-19 23:00:00 33 3216.0 333 NaN
我想data-3
从列计算data-2
列,其中赋予“data-2”列的权重取决于 df_lookup 中的相应值。我通过如下循环索引来获得所需的值,但这太慢了:
for idx in df.index:
df.loc[idx,'data-3'] = df.loc[idx, 'data-2']*df_lookup.at[idx.hour]
有人可以建议更快的方法吗?
解决方案
要插入一行并取回数据库生成的列,请使用:
INSERT INTO document_tag (tag) VALUES (@tag) RETURNING id
请注意,“RETURNING”之前没有分号 - 它只是 INSERT 语句的一个子句,正如您在 PostgreSQL 文档中看到的那样。
此外,一旦添加了 RETURNING 子句,INSERT 语句就会返回一个包含所请求信息的结果集,就像执行 SELECT 语句一样。Dapper 的Execute()
目的是在没有结果集的情况下执行,因此您需要切换到Query()
,并且可能添加一个Single()
方法来提取您需要的单个值。另一种选择是ExecuteScalar()
.
推荐阅读
- spring-boot - Spring Boot 读取超时问题(SocketTimeoutException)
- javascript - 循环遍历集合中的所有文档和每个文档中的数组以将数组值与项目匹配
- ios - 来自 swift 应用程序的 HTTP 响应的尾随 Nil
- asp.net - DbContext 依赖注入问题 - System.ObjectDisposedException:无法访问已处置的对象
- dart - 有没有办法从firestore Stream创建一个全局变量
更新自己? - python - 在大熊猫中添加 2262 年之后的时间
- python - 如何从解析的文本中获得查询的答案?
- linux - 是否有“我是谁”和“登录名”的简单替代方法?
- apache-flink - 如何使用 Apache Flink Table API 对整个表进行排序
- json - Neo4j:循环从 Cypher 中的 apoc.load.json 生成的地图