获取“sqlite3.OperationalError:靠近“ALTER”:修改列的数据类型时出现语法错误“[重复]

jjjwad0x  于 2023-05-18  发布在  SQLite
关注(0)|答案(2)|浏览(208)

此问题已在此处有答案

Modify a Column's Type in sqlite3(5个答案)
ALTER COLUMN in sqlite(5个答案)
4天前关闭。
我们小组的任务是创建和修改SQL表(我们选择在Python中完成),包括ALTER命令,但是当我们试图将列Job_id的数据类型从CHAR (10)更改为VARCHAR (10)时,我们总是得到这种语法。
代码如下:

import sqlite3

# Connect to the database
conn = sqlite3.connect('employee.db')
cursor = conn.cursor()

cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
# Create table
create_table_query = '''
CREATE TABLE EMPLOYEE (
    Emp_no INTEGER PRIMARY KEY,
    E_name TEXT,
    E_address TEXT,
    E_ph_no TEXT,
    Dept_no INTEGER,
    Dept_name TEXT,
    Job_id CHAR(10),
    Salary REAL
);
'''
cursor.execute(create_table_query)

# Display the table schema
cursor.execute("PRAGMA table_info(EMPLOYEE)")
table_schema = cursor.fetchall()
print("Table Schema:")
for column in table_schema:
    print(column)

#2.) Alter table - Change the datatype of JOB_ID from char to varchar
cursor.execute('ALTER TABLE EMPLOYEE ALTER COLUMN Job_id VARCHAR (10);')

# Display the updated table schema
cursor.execute("PRAGMA table_info(EMPLOYEE)")
table_schema = cursor.fetchall()
print("\nUpdated Table Schema: Change the datatype of JOB_ID from char to varchar")
for column in table_schema:
    print(column)

conn.close()

错误发生在第31行cursor.execute('ALTER TABLE EMPLOYEE ALTER COLUMN Job_id VARCHAR (10);')
我试过很多方法,但都不管用:

cursor.execute('ALTER TABLE EMPLOYEE MODIFY COLUMN Job_id VARCHAR (10);')
cursor.execute('ALTER TABLE EMPLOYEE ALTER COLUMN Job_id TYPE VARCHAR (10);')
cursor.execute('ALTER TABLE EMPLOYEE ALTER COLUMN JOB_ID VARCHAR (10);')

我们期待这样的输出:

Updated Table Schema: Change the datatype of JOB_ID from char to varchar
(0, 'Emp_no', 'INTEGER', 0, None, 1)
(1, 'E_name', 'TEXT', 0, None, 0)
(2, 'E_address', 'TEXT', 0, None, 0)
(3, 'E_ph_no', 'TEXT', 0, None, 0)
(4, 'Dept_no', 'INTEGER', 0, None, 0)
(5, 'Dept_name', 'TEXT', 0, None, 0)
(6, 'Job_id', 'VARCHAR(10)', 0, None, 0)
(7, 'Salary', 'REAL', 0, None, 0)
0s0u357o

0s0u357o1#

Sqlite的ALTER TABLE功能有限。您可以ADDREMOVE一列,但不能改变它(source)。

fivyi3re

fivyi3re2#

type 关键字添加到语句中是否有帮助?

cursor.execute('ALTER TABLE EMPLOYEE ALTER COLUMN Job_id TYPE VARCHAR (10);')

参见How to alter a column's data type in a PostgreSQL table?

相关问题