如何使用默认值将列添加到数据库

Pro*_*o Q 6 sql sqlite date create-table python-3.x

我有一个数据库,我正在尝试向其中添加一列。此列应保存 type 的信息timestamp,并且我希望完成后每一行都具有相同的时间戳(当前时间)。

我目前已经尝试过:

cursor.execute('''ALTER TABLE my_table ADD COLUMN time timestamp DEFAULT ?''', (datetime.datetime.utcnow(),))
Run Code Online (Sandbox Code Playgroud)

结果是sqlite3.OperationalError: near "?": syntax error.

然后我尝试了:

cursor.execute(f'''ALTER TABLE my_table ADD COLUMN time timestamp DEFAULT {datetime.datetime.utcnow()}''')
Run Code Online (Sandbox Code Playgroud)

结果是sqlite3.OperationalError: near "-": syntax error.

另外,做

cursor.execute(f'''ALTER TABLE my_table ADD COLUMN time timestamp DEFAULT CURRENT_TIMESTAMP''')
Run Code Online (Sandbox Code Playgroud)

结果是sqlite3.OperationalError: Cannot add a column with non-constant default

如何添加新列并设置该列中的值?(通过DEFAULT或其他一些机制。)

GMB*_*GMB 12

SQLite 不允许添加具有非常量值的新列。所以这:

alter table my_table add column my_time timestamp default current_timestamp;
Run Code Online (Sandbox Code Playgroud)

...产生错误:

Cannot add a column with non-constant default
Run Code Online (Sandbox Code Playgroud)

一个简单的选择是重新创建表。假设您有一个名为 的列id,则如下所示:

create table my_table_new(
    id int primary key, 
     my_time timestamp default current_timestamp
);

insert into my_table_new(id) select id from my_table;
drop table my_table;  -- back it up first!
alter table my_table_new rename to my_table;
Run Code Online (Sandbox Code Playgroud)


Sha*_*awn 5

您可以首先添加新列,然后将表中的每个现有行更新为所需的值:

ALTER TABLE my_table ADD COLUMN time;
UPDATE my_table SET time = CURRENT_TIMESTAMP;
Run Code Online (Sandbox Code Playgroud)

  • 这仍然没有解决将值设置为列的默认值的问题 (5认同)