質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1350閲覧

SQLite3 存在しなくなった値をテーブルから削除したい

teosu

総合スコア20

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/10/08 22:52

[やりたいこと]
SQLite3で存在しなくなった値をテーブルから削除したいと考えています。

Python

1fruits = [{'name': 'りんご', 'price': '100'}, 2 {'name': 'バナナ', 'price': '200'}, 3 {'name': 'いちご', 'price': '300'}, 4 ]

上記で3つの値をDBに反映した後に、一つ削除します。。

Python

1fruits = [{'name': 'りんご', 'price': '100'}, 2 {'name': 'バナナ', 'price': '200'}, 3 ]

この時に、存在しなくなった値をテーブルから削除したいのですが適切なものを見つけることができませんでした。

[やったこと]
下記コードで結果としては、削除分が反映されます。
しかし、このコードだと全てデータを削除→書き込みをしているので、存在しなくなった値だけテーブルから削除したいと思いますが、ご教授頂けないでしょうか?

import sqlite3 fruits = [{'name': 'りんご', 'price': '100'}, {'name': 'バナナ', 'price': '200'}, {'name': 'いちご', 'price': '300'}, # 2回目の実行で削除する ] conn = sqlite3.connect('fruits.db') c = conn.cursor() # c.execute(''' # CREATE TABLE fruits ( # name text primary key, # price integer # ) # ''') c.executemany('DELETE FROM fruits WHERE EXISTS (SELECT name FROM fruits)', fruits) c.executemany('REPLACE INTO fruits VALUES (:name, :price)', fruits) conn.commit() conn.close()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

delete from テーブル名 where カラム名=値
とかで

投稿2018/10/09 00:10

wwbQzhMkhhgEmhU

総合スコア343

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teosu

2018/10/09 02:22

回答ありがとうございます。 すいません、説明不足でしたが値は存在するか否かは分からないので、ある値を特定して削除ということができないんです。 辞書型の中身とDBの中身を見て相違があるものを削除できるという命令文があればと思いましたが、別でコードを書いて実装するしかなさそうですね
wwbQzhMkhhgEmhU

2018/10/09 11:42

そういう意味だったんですね。失礼しました。 必要ようなものがどういう操作なのかよく分かりませんが、selectしたものを複数行編集してからまとめてcommitするような操作であれば、クライアント側で新旧照合して消すべきかと思います。また編集中に、他のクライアントが編集できないようにするか、編集してないかを合わせて確認できるべきです。sqlite3だとテーブルロックとか大事になる気もしますが。。。というか、その辺が悩みどころで、質問したのでしょうね。私なら許されるなら1レコードずつにしちゃいます。
teosu

2018/10/11 06:21

ご丁寧に回答ありがとうございます!こちらも説明不足でやりたいことをきちんと伝えれずすいませんでした。 やはり照合して削除したりなどで対応してみようと思います。 私だったらこうする、という先人の知恵を拝借できたので参考に実装してみます。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問