【问题标题】:What could be wrong in this SQL syntax Sqlite3?这个 SQL 语法 Sqlite3 有什么问题?
【发布时间】:2021-05-23 22:10:03
【问题描述】:

这是我的 schema.sql

DROP TABLE IF EXISTS Usuarios;
DROP TABLE IF EXISTS Alunos;
DROP TABLE IF EXISTS Cargo;

CREATE TABLE Cargo (
  Nome_Cargo TEXT UNIQUE NOT NULL,
  CargoID INTEGER NOT NULL PRIMARY KEY UNIQUE 
);

CREATE TABLE Usuarios (
  Id_Usuario INTEGER PRIMARY KEY AUTOINCREMENT,
  Nome TEXT UNIQUE NOT NULL,
  Cargo TEXT,
  CPF TEXT UNIQUE,
  Is_admin INTEGER,
  User_login TEXT UNIQUE NOT NULL,
  Senha TEXT NOT NULL,
  FOREIGN KEY (CargoID) REFERENCES Cargo(CargoID)
);

CREATE TABLE Alunos (
  Id_Aluno INTEGER PRIMARY KEY AUTOINCREMENT,
  Nome_Completo TEXT NOT NULL,
  RA TEXT UNIQUE,
  Data_Nascimento TEXT,
  RM INTEGER UNIQUE,
  Data_Alteracao NOT NULL DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (Criado_Por) REFERENCES Usuarios(Id_Usuario)
);

我收到以下错误:

sqlite3.OperationalError: unknown column "CargoID" in foreign key definition

我在 python 应用程序中使用 sqlite3 和 Flask。

我也尝试过使用https://sqliteonline.com/,但我收到了同样的错误:

Help: unknown column "CargoID" in foreign key definition

我还阅读了文档和一些指南,但没有成功。

这里的语法错误是什么?

【问题讨论】:

    标签: python sql sqlite


    【解决方案1】:

    声明外键时,需要先定义列。也就是说,外键声明确实描述了现有列的一些内容:

    CREATE TABLE Usuarios (
      Id_Usuario INTEGER PRIMARY KEY AUTOINCREMENT,
      Nome TEXT UNIQUE NOT NULL,
      CargoId INTEGER,
      CPF TEXT UNIQUE,
      Is_admin INTEGER,
      User_login TEXT UNIQUE NOT NULL,
      Senha TEXT NOT NULL,
      FOREIGN KEY (CargoID) REFERENCES Cargo(CargoID)
    );
    

    请注意,我将 Cargo 替换为 CargoID。据推测,您可以使用外键和Cargo 表查找Cargo

    【讨论】:

      猜你喜欢
      • 2012-07-07
      • 2012-05-02
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      • 2014-05-08
      相关资源
      最近更新 更多