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

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

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

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

Python 3.x

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

820閲覧

プリペアードステートメントに渡すデータ内でDBの関数を使いたい

palm-t

総合スコア37

SQLite

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

Python 3.x

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2018/07/26 09:31

###前提・実現したいこと
お世話になります。

PythonからDBにデータを保存する処理を作成しています。
作成日時としてSQLite関数の「datetime()」を利用して日時を入れたいのですが、
プリペアードステートメントに渡すデータ内でこの関数を記述すると、
この関数が単なる文字列として認識され、
datetime()のままの状態でDBに登録されてしまいます。

※datetime()を囲むダブルクォートを取るとエディタがエラーと表示します。

ソースは以下のような感じです。

Python

1 sql = """ 2INSERT INTO "samples"( 3 text 4 ,created_at 5 ,delete_flg 6) 7VALUES( 8 :text 9 ,:created_at 10 ,:delete_flg 11); 12 """ 13 14 params = { 15 "text": "サンプルのテキスト", 16 "created_at": "datetime('now', '+9 hours')", 17 "delete_flg": 0 18 } 19 20 db.execute(sql, params)

今は、応急的に、paramsではなくsql側に直接、関数を書くことで対応していますが、
可能であればparams内に関数を記述したいです。

よろしくお願いいたします。

###補足情報(言語/FW/ツール等のバージョンなど)
OS: Windows7 64bit
Python: 3.6.3
DB: SQLite3

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

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

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

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

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

guest

回答1

0

ベストアンサー

params内に関数を記述したいです。

そういった型は無いので無理です。

sql側に直接、関数を書くことで対応していますが

SQL

1INSERT INTO "samples"( 2 text 3 ,created_at 4 ,delete_flg 5) 6VALUES( 7 :text 8 ,datetime('now', '+9 hours') 9 ,:delete_flg 10);

ってことでしょう? この対応でどこに不備が?

投稿2018/07/26 23:04

sazi

総合スコア25195

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

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

palm-t

2018/07/27 02:39

回答ありがとうございます。 パラメータはパラメータで一ヵ所にまとめた方がいいのではと思っていました。 このままの記述でアプリの構築を進めようと思います。
sazi

2018/07/27 03:30

DBMS側で管理している日時を埋め込むということは、初期値が設定されているということと同義なので、そもそもパラメータとして扱うものではないですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問