使用 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)
正在尝试执行匹配 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)