首页 > 解决方案 > 从 postgresql 数据库中选择一个随机行返回“无”

问题描述

我正在使用 Python 3、psycopg2 并尝试从我的数据库中检索单个随机行,如果 scand_status = 'false' 但它返回'None'。我与数据库的连接很好。有人可以帮我处理sql吗?我有 3 列:network_number、scanned_status、number_of_scans。

这是我的sql语句

def random_network_number():
    """ Retrieve a random network number from the database """
    sql_statement = "SELECT * FROM ip_store WHERE (scanned_status = false) 
    OFFSET floor(random() * (SELECT COUNT(*) FROM ip_store)) LIMIT 1;"
    network_number = execute_sql_statement(sql_statement)
    output_information(network_number)
    return network_number

输出

[ * ] None

Process finished with exit code 0

标签: python-3.xpostgresql

解决方案


一个更简单的 SQL 版本是:

SELECT * FROM ip_store WHERE (scanned_status = false) ORDER BY random() LIMIT 1;

我有一个类似的用例,它总是使用 ORDER BY random() 方法返回一条记录。

我相信您原始 SQL 的问题在于您正在使用所有记录的计数来计算您的偏移量,然后将其应用于过滤查询。我敢打赌,您的 OFFSET 大于过滤的行数。ORDER BY random() 消除了这个问题。


推荐阅读