PostgreSQL / pyscopg2 SELECT WHERE LIKE搜索db中任何字符串中包含的字符串

时间:2015-10-12 17:32:52

标签: python sql postgresql python-2.7 psycopg2

psycopg2和PostgreSQL的新手,我试图创建一个函数,给定一个字符串,将搜索我的数据库中包含该字符串的所有条目。

到目前为止,我有:

def search(searchString):
    """ Let's user search by string for any snippet containing that string """
    logging.info("Searching for snippet by string: {!r}".format(searchString))

    with connection, connection.cursor() as cursor: 
        cursor.execute("select * from snippets where message like (%s)", searchString) 
        searchResults = cursor.fetchall()
        return searchResults

所以,让我们在我的数据库中说我有很多字符串包含字符串' testME'。在命令行中,当我尝试$ python myscript.py search 'testME'在数据库中搜索具有单词' testME'的所有字符串时,在数据库中的条目是' testME'确切地返回,而不是任何其他包含' testME'的字符串的条目。我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

  1. 这可能就是您要搜索的内容:http://www.postgresonline.com/journal/index.php?/archives/69-How-to-determine-if-text-phrase-exists-in-a-table-column.html

  2. 如果没有特别需要使用某个功能,您可以执行以下操作之一:

    • 让python做困难的部分。首先获取表名

      SELECT table_name FROM information_schema.tables WHERE table_schema ='public';

    使用表名作为字段名称会返回所有字符串 列连接。因此,为所有获取的表名创建 像

    这样的查询

    SELECT * FROM tablename WHERE tablename ILIKE'%searching_this%';

    • 您也可以通过python中的系统调用来完成它。转储数据库 用pg_dump和grep作为字符串。

答案 1 :(得分:0)

cursor.execute("""
    select *
    from snippets
    where message like '%' || %s || '%'
    """, searchString
)