使用Python游标类使用LIKE语句执行多重匹配查询
正在尝试执行与4个变量匹配的select查询,其中一个变量正在检查标题中的字符串。如何使用python游标类执行LIKE语句?还是另一种方式使用Python游标类使用LIKE语句执行多重匹配查询,python,sql,cursor,Python,Sql,Cursor,正在尝试执行与4个变量匹配的select查询,其中一个变量正在检查标题中的字符串。如何使用python游标类执行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, inpu
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)
编辑:表模式
%%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)
);
我认为真正的问题是,您正在执行join,而您不知道从何处获取列(从哪个表) 你能试着添加表格吗? 我不确定这是否有帮助,但让我们试试看(因为这些表中可能没有相同的列名) 像那样
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)
@jarlh我知道这种语法,不适用于这个
cur.execute()
函数。问题不在这里吗?@jarlh LIKE在cur.execute()
函数使用它时会有不同的行为。由于该代码块无效,我也对它进行了一些调整,因为标题属于日志表。我刚刚在编辑中附加了我的表模式!请看我的编辑(关于“?”)。我看到了模式。请确保您将正确的表格添加到所有列中。抱歉,在我发表评论后添加了它们。hahaBoom修复了它,谢谢!我将在完整正确的区块中编辑(很好:)不客气