python sqlite3不尊重键表约束

时间:2020-10-22 00:41:06

标签: python sql database sqlite

我在SQLite中有此数据库架构

CREATE TABLE cliente(
                        id INTEGER PRIMARY KEY AUTOINCREMENT,
                        primeiro_nome TEXT,
                        ultimo_nome TEXT,
                        email TEXT
                    );

CREATE TABLE pedido(
                        id INTEGER PRIMARY KEY AUTOINCREMENT,
                        data TEXT,
                        status TEXT,
                        id_cliente INTEGER,
                        valor REAL,
                        FOREIGN KEY(id_cliente) REFERENCES cliente(id)
                    );

如上所述,pedido.idcliente.id之间存在一个关键约束。因此,在SQLiteStudio中,当我尝试将行添加到pedido而又不感到任何cliente.id对应的情况下,效果很好。实际上,我的表cliente是空的,因此,任何INSERT INTO pedido都不起作用。

INSERT INTO pedido (
                       data,
                       status,
                       id_cliente,
                       valor
                   )
                   VALUES (
                       '22/01/1991',
                       'ok',
                       '50',
                       200
                   );

INSERT INTO pedido (
                       data,
                       status,
                       id_cliente,
                       valor
                   )
                   VALUES (
                       '22/01/1991',
                       'ok',
                       '50',
                       200
                   );

INSERT INTO pedido (
                       data,
                       status,
                       id_cliente,
                       valor
                   )
                   VALUES (
                       '22/01/1991',
                       'ok',
                       '50',
                       200
                   );

enter image description here

但是当我使用python在sqlite3中执行相同的查询时,它起作用了,应该避免!

def cadastra_pedido(conn: str, pedido: tuple):
    """Cadastra um novo pedido no bando de dados

    Args:
        conn (str): Conexão com o banco
        pedido (tuple): Tupla contendo as informações do pedido abaixo:
        data, status, id_cliente, valor
    """

    sql = """INSERT INTO pedido
        (data, status, id_cliente, valor)
        VALUES (?,?,?,?)"""

    cursor = conn.cursor()
    cursor.execute(sql, pedido)
    conn.commit()
    conn.close()

conexao = conecta_banco_dados()
cadastra_pedido(conn=conexao, pedido=("22/01/1991", "Ok", 50, 25.31)) # This line was suppose to give me an error of key constraint, and it does not!

为什么会发生这种情况,我该如何解决?

0 个答案:

没有答案