Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python游标类使用LIKE语句执行多重匹配查询_Python_Sql_Cursor - Fatal编程技术网

使用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

正在尝试执行与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, 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修复了它,谢谢!我将在完整正确的区块中编辑(很好:)不客气