相关疑难解决方法(0)

如何在PostgreSQL中使用RETURNING和ON CONFLICT?

我在PostgreSQL 9.5中有以下UPSERT:

INSERT INTO chats ("user", "contact", "name") 
           VALUES ($1, $2, $3), 
                  ($2, $1, NULL) 
ON CONFLICT("user", "contact") DO NOTHING
RETURNING id;
Run Code Online (Sandbox Code Playgroud)

如果没有冲突,则返回如下内容:

----------
    | id |
----------
  1 | 50 |
----------
  2 | 51 |
----------
Run Code Online (Sandbox Code Playgroud)

但如果存在冲突,则不会返回任何行:

----------
    | id |
----------
Run Code Online (Sandbox Code Playgroud)

id如果没有冲突,我想返回新列,或者返回id冲突列的现有列.
可以这样做吗?如果是这样,怎么样?

sql postgresql upsert sql-returning

127
推荐指数
7
解决办法
4万
查看次数

如何在Python中的SQL语句中使用变量?

好的,所以我不是那种经验丰富的Python.

我有以下Python代码:

cursor.execute("INSERT INTO table VALUES var1, var2, var3,")
Run Code Online (Sandbox Code Playgroud)

where var1是整数,var2&var3是字符串.

如何在没有python的情况下编写变量名,包括它们作为查询文本的一部分?

python sql

79
推荐指数
5
解决办法
22万
查看次数

如果不存在则插入,否则在postgresql中返回id

我在PostgreSQL中有一个简单的表,它有三列:

  • id串行主键
  • key varchar
  • value varchar

我已经在SO上看到了这个问题:插入,在PostgreSQL中重复更新?但我想知道如果它存在,如何获取id,而不是更新.如果标准做法是始终"插入"或"如果存在则更新",为什么会这样?SELECT(LIMIT 1)的成本是否高于UPDATE?

我有以下代码

INSERT INTO tag
    ("key", "value")
    SELECT 'key1', 'value1'
WHERE
    NOT EXISTS (
        SELECT id,"key","value" FROM tag WHERE key = 'key1' AND value = 'value1'
    );
Run Code Online (Sandbox Code Playgroud)

它的工作原理是它不存在,如果存在,但我想获得id.是否有"RETURNING id"条款或类似的东西,我可以在那里点击?

postgresql

49
推荐指数
2
解决办法
4万
查看次数

编写Postgres获取或创建SQL查询

我想写一个Postgres SQL语句,说明寻找具有颜色X和亮度Y的用户.如果该用户存在,则返回其所有行数据.如果没有,请创建一个新行并传递其他信息.这两个单独的陈述会做这样的事情:

Select (color, brightness, size, age) FROM mytable WHERE color = 'X' AND brightness= 'Y';
Run Code Online (Sandbox Code Playgroud)

如果这不返回任何内容,则执行以下命令:

INSERT INTO mytable (color, brightness, size, age) VALUES (X, Y, big, old);
Run Code Online (Sandbox Code Playgroud)

有没有办法将这些组合成一个查询?

sql postgresql

12
推荐指数
4
解决办法
6039
查看次数

如何使用 pandas.to_sql 但仅在行尚不存在时添加行

我对 python 有一些经验,但对 SQL 很陌生,并尝试使用 pandas.to_sql 将表数据添加到我的数据库中,但是当我添加时,我希望它在追加之前检查数据是否存在

这是我的 2 个数据框

>>> df0.to_markdown()
|    |   Col1 |   Col2 |
|---:|-------:|-------:|
|  0 |      0 |     00 |
|  1 |      1 |     11 |

>>> df1.to_markdown()
|    |   Col1 |   Col2 |
|---:|-------:|-------:|
|  0 |      0 |     00 |
|  1 |      1 |     11 |
|  2 |      2 |     22 |
Run Code Online (Sandbox Code Playgroud)

所以这里我使用pandas to_sql

>>> df0.to_sql(con=con, name='test_db', if_exists='append', index=False)
>>> df1.to_sql(con=con, name='test_db', if_exists='append', index=False)
Run Code Online (Sandbox Code Playgroud)

在这里我检查数据库文件中的数据

>>> df_out = …
Run Code Online (Sandbox Code Playgroud)

python mysql pandas pandas-to-sql

12
推荐指数
2
解决办法
1万
查看次数

如果一行不存在,则插入else不会在postgres中插入

我需要检查是否存在行.如果它不存在,则应插入.

这是在postgres,我试图通过shell脚本插入行.当我运行脚本时,它不显示错误,但即使没有匹配的行,它也不会插入到表中.

sql postgresql

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

Postgresql - 使用来自SELECT的sqlalchemy的INSERT插入到不存在的地方

正如在指出的那样,可以使用postgresql 9.1+进行以下操作

INSERT INTO example_table
    (id, name)
SELECT 1, 'John'
WHERE
    NOT EXISTS (
        SELECT id FROM example_table WHERE id = 1
    );
Run Code Online (Sandbox Code Playgroud)

我一直在玩sqlalchemy的0.9版本,他们从SELECT方法引入了INSERT,理论上应该处理上述问题.

有可能,如果可能,怎么样?(因为我想利用在使用原始sql时不返回的result.inserted_primary_key)

我如何使用bindparams作为'from_select'部分,因为我可以使用它的唯一方法是在select中使用表列.

例如

insrt = example_table.insert().
    from_select(['id', 'name'],
    example_table.select().
    where(~exists(select([example_table.c.id],
    example_table.c.id == 1))))

result = session.execute(insrt)

if result.is_insert:
    print 'do something with result.inserted_primary_key'
Run Code Online (Sandbox Code Playgroud)

python postgresql sqlalchemy insert-update

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

如果不存在Postgresql插入

我是SQL的新手,我得到的只是错误后的错误,所以任何帮助都将不胜感激.

我有一个标签表:id,name,slug

我已经谷歌了,在Stackoverflow上搜索过,但没有什么对我有用.我正在尝试创建一个标签,如果它不存在,但总是返回ID,无论它是创建还是存在.

INSERT INTO tags (name, slug)
SELECT ('Wow', 'wow')
WHERE NOT EXISTS (SELECT id FROM tags WHERE slug = 'wow')
RETURNING id;
Run Code Online (Sandbox Code Playgroud)

这就是我所拥有的:http://sqlfiddle.com/#!15/4050a/18

sql postgresql

7
推荐指数
1
解决办法
2万
查看次数

插入多行时重复项会发生什么?

我正在运行一个python脚本,将大量数据插入到Postgres数据库中,我使用单个查询来执行多行插入:

INSERT INTO table (col1,col2) VALUES ('v1','v2'),('v3','v4') ... etc
Run Code Online (Sandbox Code Playgroud)

我想知道如果它碰到插入的重复键会发生什么.它会停止整个查询并抛出异常吗?或者它只是忽略该特定行的插入并继续前进?

sql postgresql exception upsert duplicates

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

使用python将图像插入Postgres的正确方法是什么?

我试图调整这里这里的例子

import psycopg2
#Given media_id and image_url and conn object
image_data = urllib2.urlopen(image_url).read()
sql =("INSERT INTO images (media_id, data) 
SELECT %s
WHERE 
NOT EXISTS (SELECT media_id FROM images WHERE media_is = CAST(%s as TEXT) ")
data_insert_image = (media_id, psycopg2.Binary(image_data))
cursor.execute(sql_insert_image, data_insert_image)
conn.commit()
Run Code Online (Sandbox Code Playgroud)

结果是:

TypeError: not all arguments converted during string formatting
Run Code Online (Sandbox Code Playgroud)

这对我来说很有意义,因为图像不是String; 但是,我不知道如何正确插入。应该如何进行插入?

python sql postgresql psycopg2

3
推荐指数
1
解决办法
2303
查看次数

PostgreSQL:在插入时创建访问令牌

在插入,我应该怎么唯一设置的值access_token,以一个随机字符串和值返回给客户端?

我有:

CREATE TABLE user (
    id             serial PRIMARY KEY,
    access_token   char(32) NOT NULL UNIQUE,
    joined         timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
);
Run Code Online (Sandbox Code Playgroud)

数据库服务器:PostgreSQL
应用服务器:Sinatra(Ruby)
客户端:iOS

postgresql stored-procedures access-token

1
推荐指数
2
解决办法
3415
查看次数