2017-02-01 3 views
3

Я просто изучаю SQL и извиняюсь, если это повторяется, но я искал и не нашел ответа. Запись на python с помощью PostgreSQL DB.Проверка столбца таблицы PostgreSQL для значения и возврата boolean

Я хочу проверить таблицу в моей базе данных, чтобы увидеть, содержит ли столбец «Порт» определенное местоположение. Я могу сделать это в интерактивном режиме, но он возвращает результат таблицы, например:

select exists(select 1 from ref_locations where "Port"='ORAN'); 

возвращается:

exists 
------- 
t 
(1 row) 

... Я хочу, чтобы возвращать только логическое значение, и я хочу сделать это в моем скрипте python. В моем сценарии python у меня есть:

exists = False 
cnx.execute("""select exists(select 1 from ref_locations where "Port"='BAKU');""") 
print "Exists: ",exists 

но существует всегда с False. Любая помощь очень ценится.

+0

'печать "Exists:", exists' ваш существует переменная не изменяется в результате запрос. Вам нужно получить результат запроса и присвоить его переменной. Вероятно, в вашем курсоре есть какая-то функция, например 'exists = cnx.get_result();' – wildplasser

+0

Спасибо! Отличные ответы. И, по крайней мере, в процессе моей работы над этим, я понял, что, поскольку я тестирую много слов для их существования в таблице «Порт», мне действительно быстрее читать таблицу в таблице хэша или панды, а не запрашивать базу данных каждый раз. – Callie

ответ

1

Ваше утверждение PostgreSQL не проблема, хотя вы могли бы сократить его чуточку к этому:

select exists(select from ref_locations where Port='ORAN'); 

Проблема вы испытываете заключается в том, что результат выполнения оператора выполнения не присваивается.

Рассмотрим пытается это вместо того, чтобы (после вашего выполнить оператор):

exists = cnx.fetchone() 

или просто

print cnx.fetchone() 
0

Существует много вариантов, но Простейшая является:

select count(*) > 0 from ref_locations where "Port"='ORAN'