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

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

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

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

Python 3.x

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

Q&A

解決済

3回答

1326閲覧

PythonでSQLiteにインサートするコードを見やすくしたい

One_of_Arthur

総合スコア81

SQLite

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

Python 3.x

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

0グッド

1クリップ

投稿2022/09/29 09:40

前提

Python3で開発中のコードがあります。
意図通り動いているのですけれど、これをまだ手を加えていくにあたって、
もっと見やすく、メンテナンス性良く、スッキリと書けないかと思ったのですけれど、
自力で解決できません。

実現したいこと

今ある1行が、クオーテーションが多くなりメンテナンス性が悪いです。
それをもっと見やすく、メンテナンス性良く、スッキリとさせたいです。

発生しているエラーメッセージ

無し

該当のソースコード

意図通りに動いていますが、この1行だけが問題なので、他は省略します。

Python

1cur.execute('insert into YT_persons values("' + channelID + '", "' + channelTitle + '", ' + subscribed + ', ' + subscription + ', "' + timestamp + '")')

試したこと

少しググってしらべましたが解決できません。

補足情報(FW/ツールのバージョンなど)

レコードの型を書いておきます。
channelID ・・・テキスト
channelTitle ・・・テキスト
subscribed ・・・整数
subscription ・・・整数
timestamp ・・・テキスト

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

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

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

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

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

melian

2022/09/29 09:52

f-strings を使うと少しはすっきりするかもしれません。 cur.execute(f'insert into YT_persons values("{channelID}", "{channelTitle}", {subscribed}, {subscription}, "{timestamp}")')
TakaiY

2022/09/29 10:27

(回答は回答欄に書きましょう > melianさん)
guest

回答3

0

SQLクエリであればSQLインジェクション対策のため%プレースホルダーを使うのが良い方法です。
詳細はUsing placeholders to bind values in SQL queriesを参照ください。

Python

1id, title, subs= '1', 'hoge', 12 2cur.execute('INSERT INTO YT_persons VALUES(?,?,?)', (id, title, subs))

投稿2022/09/30 00:33

can110

総合スコア38267

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

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

One_of_Arthur

2022/09/30 10:04

有難うございます。 最初自分がイメージしてたのが、まさにこんな風に書けないかと考えていました。
guest

0

ベストアンサー

ちょうど勉強中だったので!

python

1cur.execute(f''' 2 -- テーブル 3 INSERT INTO persons 4 -- 値 5 VALUES( 6 "{name}", 7 "{age}" 8 ) 9''') 10

投稿2022/09/29 10:27

sikimori

総合スコア13

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

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

One_of_Arthur

2022/09/30 09:46

すごい! こんな記述方法があるんですね。 今、実際に動くことを確認しました。 しかもこれだと、テキストか整数かでクォーテーション変えなくて済むんですね。驚きました。
guest

0

まずは f文字列を使うことで、複雑さをかなり減らすことができるでしょう。

python

1str = f'insert into YT_persons values("{channelID}", "{channelTitle}", "{subscribed}", "{subscription}", "{timestamp}")'

f文字列の中では、{}でかこまれた変数がその内容で置き換えられます。

また、文字列は空白で区切って記述すると、連結されるようになっています。

python

1str = "abc" "def" "ghi" 2# str -> abcdefghi

これを使うと、

python

1str = f'insert into YT_persons values(' \ 2 f'"{channelID}", "{channelTitle}",' \ 3 f'"{subscribed}", "{subscription}",' \ 4 f'"{timestamp}")'

こんな風に折り返すことができます。
最後の 「\」が邪魔であれば、全体を()でくくるという手もあります。 どちらがいいかは好みですね。

python

1str = (f'insert into YT_persons values(' 2 f'"{channelID}", "{channelTitle}",' 3 f'"{subscribed}", "{subscription}",' 4 f'"{timestamp}")')

投稿2022/09/29 10:26

TakaiY

総合スコア12783

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

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

One_of_Arthur

2022/09/30 09:55

有難うございます。 実際に試してみました。 これもかなり良いですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問