标签: insert-update

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
查看次数

Mongodb Skip()和limit()

我正在使用大量记录对mongo集合执行更新查询.所以我正在使用skip()limit()功能.例如:在第一个文件中,我正在处理前50000条记录.

cur1= db.collection_name.find(no_cursor_timeout=True).skip(0).limit(50000)
Run Code Online (Sandbox Code Playgroud)

在发送文件中,我正在访问下一个50000条记录

cur2=db.collection_name.find(no_cursor_timeout=True).skip(50000).limit(50000)
Run Code Online (Sandbox Code Playgroud)

我在单独的文件中对这两个游标执行各种更新查询.现在我想知道如何将这些更新的记录添加回集合中?cur2查询中是否会更新cur2记录?

skip limit insert-update mongodb

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

如何更新堆中的元素?(优先队列)

使用最小/最大堆算法时,优先级可能会发生变化.处理此问题的一种方法是删除并插入元素以更新队列顺序.

对于使用数组实现的优先级队列,这可能是一个似乎可以避免的性能瓶颈,特别是对于优先级变化较小的情况.

即使这不是优先级队列的标准操作,这也是一个可以根据我的需要进行修改的自定义实现.

是否有众所周知的最佳实践方法来更新min/max-heap中的元素?


背景信息:我不是二叉树专家,我继承了一些代码,这些代码在优先级队列中重新插入了元素.我为重新排序新元素的min-heap做了一个重新插入函数 - 这给了一个可测量的改进(删除和插入),但这似乎是其他人可能已经解决的更优雅的问题办法.

我可以链接到代码,如果它有所帮助,但宁愿不太关注实现细节 - 因为这个Q&A可能保持一般.

algorithm priority-queue insert-update min-heap

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

MySQL INSERT ON DUPLICATE KEY UPDATE ...返回“受影响的行:1”,但实际上没有任何更改

我创建具有默认值“ 1”的列的表

create table int_1 (
  id int not null auto_increment,
  value int default 1,
  primary key (id)
);
Run Code Online (Sandbox Code Playgroud)

命令

insert into int_1 values(1, null) on duplicate key update value = null;
Run Code Online (Sandbox Code Playgroud)

总是返回结果

1 row(s) affected
Run Code Online (Sandbox Code Playgroud)

但记录在第一次执行后确实发生了更改(插入)。但是,如果我使用默认值“ 0”创建表,则所有功能均按预期工作:

create table int_0 (
  id int not null auto_increment,
  value int default 0,
  primary key (id)
);
insert into int_0 values(1, null) on duplicate key update value = null;
Run Code Online (Sandbox Code Playgroud)

返回

0 row(s) affected
Run Code Online (Sandbox Code Playgroud)

第二次运行后“插入重复键”

在MySQL 5.7,8.0上检查

有这种行为的解释吗?

mysql insert-update

9
推荐指数
2
解决办法
510
查看次数

如何使用Transact SQL将JPEG插入到图像类型的SQL Server 2000数据库字段中

我正在尝试弄清楚如何使用Transact SQL将.JPG文件插入到图像类型的SQL Server 2000数据库字段中.谢谢.

t-sql image sql-server-2000 insert-update

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

更新表而不命名所有列

我找到了一种方法,使用此模板使来自不同数据库的两个表相互匹配:

INSERT [DestDB].[dbo].[TABLE]
SELECT source.* FROM 
[SourceDB].[dbo].[TABLE] AS source
LEFT OUTER JOIN
[DestDB].[dbo].[TABLE] AS dest
ON 
source.[PKColumn] = dest.[PKColumn]
WHERE dest.[PKcolumn] IS NULL

UPDATE dest
SET 
 dest.[PK_COLUMN1] = source.[PK_COLUMN1]
,dest.[COLUMN2] = source.[COLUMN2]
,dest.[COLUMN3] = source.[COLUMN3]
,dest.[COLUMN4] = source.[COLUMN4]
,dest.[COLUMN5] = source.[COLUMN5]
,dest.[COLUMN6] = source.[COLUMN6]
,dest.[COLUMN7] = source.[COLUMN7]
,dest.[COLUMN8] = source.[COLUMN8]

FROM 
[SourceDB].[dbo].[TABLE] AS source
INNER JOIN 
[DestDB].[dbo].[TABLE] AS dest
ON source.[PK_Column1] = dest.[PK_Column1]
Run Code Online (Sandbox Code Playgroud)

然而,我正在使用的一些表至少有200列,虽然可以通过复制+粘贴的功能来实现这一点,但我只需要知道是否有一种方法不会让我得到Carpel Tunnel Syndrome.

我正在使用Microsoft SQL Server 2005.

有什么建议?

sql-server-2005 insert-update multiple-columns

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

PostgreSQL创建一个新列,其值以其他列为条件

我使用PostgreSQL 9.1.2并且我有一个基本表,如下所示,我将条目的生存状态作为布尔值 (Survival)以及天数(Survival(Days)).

我手动添加了一个名为的新列1-yr Survival,现在我想为表中的每个条目填写此列的值,条件是该条目的值SurvivalSurvival (Days)列值.一旦完成,数据库表将如下所示:

Survival    Survival(Days)    1-yr Survival
----------  --------------    -------------
Dead            200                NO
Alive            -                 YES
Dead            1200               YES
Run Code Online (Sandbox Code Playgroud)

输入条件值的伪代码1-yr Survival将类似于:

ALTER TABLE mytable ADD COLUMN "1-yr Survival" text
for each row
if ("Survival" = Dead & "Survival(Days)" < 365) then Update "1-yr Survival" = NO
else Update "1-yr Survival" = YES
end 
Run Code Online (Sandbox Code Playgroud)

我相信这是一个基本的操作,但我没有找到postgresql语法来执行它.一些搜索结果返回"添加触发器",但我不确定这是我所需要的.我认为我的情况要简单得多.任何帮助/建议将不胜感激.

postgresql insert-update conditional-statements

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

如何在非常大的MySQL表上提高INSERT性能

我正在研究一个大型MySQL数据库,我需要提高特定表上的INSERT性能.这个包含大约200百万行,其结构如下:

(一个小前提:我不是数据库专家,所以我编写的代码可能基于错误的基础.请帮助我理解我的错误:))

CREATE TABLE IF NOT EXISTS items (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(200) NOT NULL,
    key VARCHAR(10) NOT NULL,
    busy TINYINT(1) NOT NULL DEFAULT 1,
    created_at DATETIME NOT NULL,
    updated_at DATETIME NOT NULL,

    PRIMARY KEY (id, name),
    UNIQUE KEY name_key_unique_key (name, key),
    INDEX name_index (name)
) ENGINE=MyISAM
PARTITION BY LINEAR KEY(name)
PARTITIONS 25;
Run Code Online (Sandbox Code Playgroud)

每天我收到许多csv文件,其中每一行由"name; key"对组成,所以我必须解析这些文件(为每行添加值created_at和updated_at)并将值插入到我的表中.在这一个中,"name"和"key"的组合必须是UNIQUE,所以我实现了如下插入过程:

CREATE TEMPORARY TABLE temp_items (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(200) NOT NULL, 
    key VARCHAR(10) NOT NULL, 
    busy TINYINT(1) NOT NULL …
Run Code Online (Sandbox Code Playgroud)

mysql database performance insert insert-update

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

使用insertWithOnConflict进行更新或插入

我需要插入或更新,我发现SQLiteDatabase的方法insertWithOnConflict,但我不知道如何检查该条目是否已存在.

从理论上讲,我需要一个"Where"参数来检查某个ID是否存在,如果存在,它应该替换所有其他列.

这就是我现在所拥有的,但我不认为第二个参数是唯一的id

    ContentValues args = new ContentValues();
    args.put(AppDatabase.COLUMN_ID, entry.getId());
    args.put(AppDatabase.COLUMN_NAME, entry.getAppname());
    args.put(AppDatabase.COLUMN_URL, entry.getAppUrl());
    database.insertWithOnConflict(AppDatabase.TABLE_FILELIST, COLUMN_ID, args, SQLiteDatabase.CONFLICT_REPLACE);
Run Code Online (Sandbox Code Playgroud)

我该如何管理这种行为?

sqlite android insert-update where-clause

8
推荐指数
1
解决办法
9248
查看次数

在零索引处插入第一个项目时,notifyItemInserted()无效

我试图在第一个位置的回收者视图中插入一个项目,即0索引如下

 try {
       commentList.add(new Comment(
          Preferences.getProfileImageUrl(),
             "",                                       
               Preferences.getUserName(DONApplication.getInstance()),
               String.valueOf(Preferences.getUserId(DONApplication.getInstance())),
               response.getString("comment_id"),
               commentText
       ));
       commentAdapter.notifyItemInserted(commentList.size() - 1);                                      
     } catch (Exception e) {
         e.printStackTrace();                    
       }
Run Code Online (Sandbox Code Playgroud)

但它根本没有显示,但当我关闭窗口并再次打开它时,它变得可见.我不知道为什么会这样.有人能帮我吗?

android insert-update android-recyclerview

8
推荐指数
1
解决办法
3932
查看次数