首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在创建表期间在SQLite中设置默认值

如何在创建表期间在SQLite中设置默认值
EN

Stack Overflow用户
提问于 2017-09-24 19:49:49
回答 2查看 2.6K关注 0票数 2

寻求一些建议和帮助。如果没有将日期值插入到表中,则我希望将列值设置为默认为当前系统日期。我尝试了两种不同的方法,但都没有成功。第一个是下面。使用字符串格式并运行此代码,

代码语言:javascript
复制
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()

给我一个错误:

代码语言:javascript
复制
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年是这个月,但我不理解这个错误。第二种方法是尝试使用元组,如下所示:

代码语言:javascript
复制
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()

并运行返回:

代码语言:javascript
复制
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,谢谢您的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-24 20:29:17

我认为你只是错过了两个'在:

代码语言:javascript
复制
collected_date TEXT DEFAULT '{}'

下面的代码运行时没有错误:

代码语言:javascript
复制
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上得到了一个带有默认值的更干净的结果。

票数 0
EN

Stack Overflow用户

发布于 2017-09-24 21:16:37

您可以将特殊符号日期用作新插入的行的默认值:

代码语言:javascript
复制
CREATE TABLE tally_file (
    [...],
    collected_date TEXT DEFAULT CURRENT_DATE
);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46394210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档