寻求一些建议和帮助。我想将列值设置为默认为当前系统日期,如果没有日期值插入表中。我试图以两种不同的方式取得成功。第一个是下面。使用字符串格式并运行此代码,
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()
给我错误:
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
我猜这是09月,但我不理解这个错误。 第二种方法是尝试使用如下的元组:
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版本2.8.17 提前感谢您的帮助。
答案 0 :(得分:2)
您可以使用特殊符号CURRENT_DATE作为新插入行的默认值:
CREATE TABLE tally_file (
[...],
collected_date TEXT DEFAULT CURRENT_DATE
);
答案 1 :(得分: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
一般来说,现在是一个很好的决定,在今天的模式创建日期默认数据库,而不是一个非常特殊的任务(例如,数据库很快就存在)。我猜你会在插入时得到一个更清晰的默认值结果。