我正在使用python和mysqldb模块在数据库中搜索用户输入。 我测试了python并建立了与服务器和数据库的连接。这是SQL代码给我带来的麻烦。 我的SQl如下:
SELECT * FROM panda WHERE MATCH(Question) AGAINST('"{0}"')
我正在使用python,因此{0}是用户输入。那个位有效。由于某种原因,它与数据库中的列中的确切短语不匹配。例如,如果用户输入“See you”,则数据库将其匹配为“我想看到你”,而不仅仅是“看到你”。有没有办法得到具体的短语?我尝试使用布尔模式和正则表达式,但它们不起作用。
编辑:谢谢大家。你的所有方法都有效,结果我没有正确地格式化SQL。抱歉没问题。
答案 0 :(得分:1)
那么为什么不使用WHERE问题='" {0}"'
答案 1 :(得分:1)
这是如何使用python和sql一起搜索某个列'Question',其值等于inputVar并获取行中的整个条目。
import MySQLdb
db = MySQLdb.connect("localhost", "root", "password", "MY_DATABASE")
cursor=db.cursor()
sql="SELECT * FROM MY_TABLE WHERE Question = '%s';" %inputVar;
try:
cursor.execute(sql)
row = cursor.fetchall()
print row[0] #assuming 1st column is 'Question' column.
db.commit()
except:
print ("ROLLBACK!!!")
db.rollback()
答案 2 :(得分:0)
查看MATCH ... AGAINST的文档。你想要的是一个简单的比较,尝试这样的事情:
SELECT * FROM panda WHERE Question = {0};
答案 3 :(得分:0)
MATCH ... AGAINST
,也称为FULLTEXT搜索,正在按照您的设计执行。其目的是挖掘大量文本并查找包含查询匹配文本的行。
请注意,FULLTEXT索引只能看到列中文本的前750个左右字符。
这是有用的功能,因为即使文本中出现随机标点符号或其他单词,它也能正常工作。 WHERE column = 'value'
要求完全匹配。
您可以尝试此查询:它将大致以增加的长度顺序显示结果。这将按照结果的顺序在“我想见到你”之前推动“看见你”。
SELECT *
FROM panda
WHERE MATCH(Question) AGAINST('"{0}"')
ORDER BY CEIL(LOG2(LENGTH(Question))) ASC,
MATCH(Question) AGAINST('"{0}"')
请注意,当您在MATCH(Question) AGAINST('"{0}"')
或SELECT
子句中使用匹配项时,表达式ORDER BY
会生成一个数字,指定匹配的紧密程度。
另请注意,CEIL(LOG2(LENGTH(Question)))
子句中的表达式ORDER BY
会根据长度将结果分组。它将长度分为3-4,然后长度为5-8,9-16,等等。