2017-09-24 32 views
1

いくつかのアドバイスや助けを頼りにしています。私は、現在のシステム日付にデフォルト値にカラム値を設定したい、日付値をテーブルに挿入しないでください。私は2つの異なる方法で成功しなかった。最初は以下の通りです。私は09月ですが、私はこのエラーを理解していないです推測していますテーブル作成時にSQLiteのデフォルトの日付値を設定する方法

Traceback (most recent call last): 
    File "main.py", line 18, in <module> 
    main() 
    File "main.py", line 11, in main 
    db.create_table() 
    File "/home/bigdaddy/PAM_Android/db_helper.py", line 25, in create_table 
    )""".format(current_date)) 
sqlite3.OperationalError: near "09": syntax error 

current_date = datetime.now().strftime('%Y %m %d') 
conn = sqlite3.connect("pipe_tally.db") 

cur = conn.cursor() 

def create_table(): 
    """This function creates the database table.""" 
    cur.execute("""CREATE TABLE tally_file (
     pipe_id TEXT PRIMARY KEY, 
     kind TEXT, 
     joint_num INTEGER, 
     heat INTEGER, 
     asset_length REAL CHECK(asset_length > 0), 
     asset_wall_thickness REAL, 
     asset_degree REAL, 
     manufacturer TEXT, 
     collected_date TEXT DEFAULT {} 
     )""".format(current_date)) 
    conn.commit() 

、文字列フォーマットを使用してこのコードを実行することは私にエラーを与えます。返し

import sqlite3 
from datetime import datetime 

current_date = datetime.now().strftime('%Y %m %d') 
conn = sqlite3.connect("pipe_tally.db") 

cur = conn.cursor() 

def create_table(): 
    """This function creates the database table.""" 
    cur.execute("""CREATE TABLE tally_file (
     pipe_id TEXT PRIMARY KEY, 
     kind TEXT, 
     joint_num INTEGER, 
     heat INTEGER, 
     asset_length REAL CHECK(asset_length > 0), 
     asset_wall_thickness REAL, 
     asset_degree REAL, 
     manufacturer TEXT, 
     collected_date TEXT DEFAULT (?) 
     )""", (current_date,)) 
    conn.commit() 

し、実行:

Traceback (most recent call last): 
    File "main.py", line 18, in <module> 
    main() 
    File "main.py", line 11, in main 
    db.create_table() 
    File "/home/bigdaddy/PAM_Android/db_helper.py", line 25, in create_table 
    )""", (current_date,)) 
sqlite3.OperationalError: default value of column [collected_date] is not constant 

それはSQLiteので、これを達成することは可能です 第二の方法は、以下のようにタプルを使用しようとしていますか? 私はXubuntu Linux 16.04 LTS、Python3.6、SQLite3 version 2.8.17を使用しています ありがとうございました。

+0

「現在」を参照してください、テーブルの作成や行の挿入を行いますか? –

+0

@ CL。行挿入中に "現在"を意味したいと思います。申し訳ありませんが、それを明確にしていません。 – J2112O

答えて

0

私はあなたが単に二つ'年代に欠けていると思う:

collected_date TEXT DEFAULT '{}' 

以下のコードはエラーなしで実行されます。

from datetime import datetime 
import sqlite3 

conn = sqlite3.connect(':memory:') 
cur = conn.cursor() 

current_date = datetime.now().strftime('%Y %m %d') 
command = """CREATE TABLE tally_file (
     collected_date TEXT DEFAULT '{}' 
     )""".format(current_date) 

cur.execute(command) 
conn.commit() 
conn.close() 

一般にhere

同様の答えがありますが、スキーマの作成時に今日の日付を使用してデータベースをデフォルトにすることは、今のところ非常に良い決定です。それは非常に特殊な作業ではありません。慌てて)。あなたは挿入時にデフォルト値でよりきれいな結果を得るでしょう。

+0

Thanks @ Evgeny Pogrebnyak。これは、エラーなしでテーブルを作成するために機能します。今私は行の挿入レベルでこれを実装する必要があることを認識しています。 – J2112O

1

あなたは新しく挿入された行のデフォルト値として特殊記号CURRENT_DATEを使用することができます。

CREATE TABLE tally_file (
    [...], 
    collected_date TEXT DEFAULT CURRENT_DATE 
); 
+0

それは@CLでも使えます。ありがとう – J2112O

関連する問題