使用 Python 游标 class 执行带有 LIKE 语句的多匹配查询

Using Python Cursor class to execute multimatch query with LIKE statement

正在尝试执行匹配 4 个变量的 select 查询,其中之一是检查标题中的字符串。如何使用 python 游标 class 执行 LIKE 语句?还是另一种方式?

stmt = "SELECT * FROM publication NATURAL JOIN journal NATURAL JOIN authors WHERE name = ? AND year = ? AND booktitle = ? AND title LIKE '%%%s%%'" % (input_names, input_year, input_booktitle, input_string) 
print(stmt)
cur.execute(stmt)

编辑:table 模式

%%sql
DROP TABLE IF EXISTS publication;
CREATE TABLE publication(
    ID INT PRIMARY KEY NOT NULL,
    title VARCHAR NOT NULL
);

/* Author Entity set and writes_for relationship */
DROP TABLE IF EXISTS authors;
CREATE TABLE authors(
    name VARCHAR(200) PRIMARY KEY NOT NULL,
    ID INT,
    title VARCHAR(200),
    FOREIGN KEY(id, title) REFERENCES publication(ID, title)
);

/* Journal Entity set and apart_of relationship */
DROP TABLE IF EXISTS journal;
CREATE TABLE journal(
    booktitle VARCHAR(200) PRIMARY KEY NOT NULL,
    pages INT,
    year INT(4),
    ID INT,
    title VARCHAR(200),
    FOREIGN KEY(ID, title) REFERENCES publication(ID, title)
);

我认为真正的问题是你正在做连接,但你没有告诉它从哪里获取列(从哪个 table)。

能否尝试添加 table? 我不确定它会有所帮助,但让我们试试(因为也许你在这些 tables 中没有相同的列名)

像那样?

stmt = "SELECT * FROM publication NATURAL JOIN journal NATURAL JOIN
authors WHERE authors.name = ? AND journal.year = ? AND
journal.booktitle = ? AND journal.title LIKE     
'%%%s%%'" % (input_names, input_year, input_booktitle, input_string) 
print(stmt)
cur.execute(stmt)

第二件事: 您应该使用“%s”而不是“?”

stmt = "SELECT * FROM publication NATURAL JOIN journal NATURAL JOIN
authors WHERE authors.name = '%s' AND journal.year = '%s' AND
journal.booktitle = '%s' AND journal.title LIKE     
'%%%s%%'" % (input_names, input_year, input_booktitle, input_string) 
print(stmt)
cur.execute(stmt)