寻求一些建议和帮助。如果没有将日期值插入到表中,则我希望将列值设置为默认为当前系统日期。我尝试了两种不同的方法,但都没有成功。第一个是下面。使用字符串格式并运行此代码,
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可以完成这个任务吗?我正在使用XubuntuLinux16.04LTS、Python3.6和SQLite3版本2.8.17,谢谢您的帮助。
发布于 2017-09-24 20:29:17
我认为你只是错过了两个'在:
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()有一个类似的答案,这里
一般来说,现在是一个很好的决定,默认数据库与今天的日期在模式创建,不更少,这是一个非常特殊的任务(例如。数据库存在的时间很短)。我想,您在insert上得到了一个带有默认值的更干净的结果。
发布于 2017-09-24 21:16:37
您可以将特殊符号日期用作新插入的行的默认值:
CREATE TABLE tally_file (
[...],
collected_date TEXT DEFAULT CURRENT_DATE
);https://stackoverflow.com/questions/46394210
复制相似问题