Làm cách nào để xác định xem bảng có tồn tại bằng thư viện Python Psycopg2 không? Tôi muốn một boolean đúng hay sai.Kiểm tra xem bảng postgresql có tồn tại dưới python (và có lẽ Psycopg2)
Trả lời
Làm thế nào về:
>>> import psycopg2
>>> conn = psycopg2.connect("dbname='mydb' user='username' host='localhost' password='foobar'")
>>> cur = conn.cursor()
>>> cur.execute("select * from information_schema.tables where table_name=%s", ('mytable',))
>>> bool(cur.rowcount)
True
Một thay thế sử dụng EXISTS là tốt hơn ở chỗ nó không đòi hỏi rằng tất cả các hàng được lấy ra, nhưng chỉ đơn thuần là ít nhất một dòng như vậy tồn tại:
>>> cur.execute("select exists(select * from information_schema.tables where table_name=%s)", ('mytable',))
>>> cur.fetchone()[0]
True
select exists(select relname from pg_class
where relname = 'mytablename' and relkind='r');
không hoạt động cho relname với lược đồ, như 'myschema.tabname' –
Tôi không biết các lib psycopg2 cụ thể, nhưng với câu truy vấn sau đây có thể được sử dụng để kiểm tra sự tồn tại của một bảng:
SELECT EXISTS(SELECT 1 FROM information_schema.tables
WHERE table_catalog='DB_NAME' AND
table_schema='public' AND
table_name='TABLE_NAME');
Ưu điểm của việc sử dụng information_schema qua chọn trực tiếp từ pg_ * bảng là một mức độ di động của truy vấn.
Đối mặc định table_catalog sử dụng ?? –
Câu trả lời đầu tiên không hiệu quả với tôi. Tôi tìm thấy thành công kiểm tra các mối quan hệ trong pg_class:
def table_exists(con, table_str):
exists = False
try:
cur = con.cursor()
cur.execute("select exists(select relname from pg_class where relname='" + table_str + "')")
exists = cur.fetchone()[0]
print exists
cur.close()
except psycopg2.Error as e:
print e
return exists
#!/usr/bin/python
# -*- coding: utf-8 -*-
import psycopg2
import sys
con = None
try:
con = psycopg2.connect(database='testdb', user='janbodnar')
cur = con.cursor()
cur.execute('SELECT 1 from mytable')
ver = cur.fetchone()
print ver //здесь наш код при успехе
except psycopg2.DatabaseError, e:
print 'Error %s' % e
sys.exit(1)
finally:
if con:
con.close()
Các giải pháp sau đây là xử lý các schema
quá:
import psycopg2
with psycopg2.connect("dbname='dbname' user='user' host='host' port='port' password='password'") as conn:
cur = conn.cursor()
query = "select to_regclass(%s)"
cur.execute(query, ['{}.{}'.format('schema', 'table')])
exists = bool(cur.fetchone()[0])
- 1. Kiểm tra xem bảng có tồn tại
- 2. Postgresql: Kiểm tra xem lược đồ có tồn tại không?
- 3. Kiểm tra xem bảng có tồn tại trên MySQL
- 4. Kiểm tra xem bảng truy cập có tồn tại không
- 5. Kiểm tra xem bảng có tồn tại trong C#
- 6. python: kiểm tra xem url có tồn tại jpg không.
- 7. Kiểm tra nhanh nhất nếu hàng tồn tại trong PostgreSQL
- 8. Kiểm tra xem tệp có tồn tại trong ksh
- 9. Kiểm tra xem các khóa/nút JSON có tồn tại
- 10. Kiểm tra xem id DIV có tồn tại với JQuery
- 11. Làm cách nào để kiểm tra xem bảng có tồn tại trong API sqlite3 C++ không?
- 12. Kiểm tra xem phiên có tồn tại không JSF
- 13. Cách kiểm tra xem tệp có tồn tại từ url
- 14. Kiểm tra xem người dùng mysql có tồn tại
- 15. Kiểm tra xem đầu vào biểu mẫu có tồn tại
- 16. Cách kiểm tra xem tệp có tồn tại trong makefile
- 17. php: kiểm tra xem đường dẫn có tồn tại không?
- 18. Kiểm tra xem phương thức jQuery có tồn tại
- 19. PDO/PHP - Kiểm tra xem hàng có tồn tại
- 20. Kiểm tra xem có tồn tại enum trong Java
- 21. Tăng PropertyTree: kiểm tra xem con có tồn tại
- 22. jQuery: Kiểm tra xem hình ảnh có tồn tại
- 23. Express, kiểm tra xem mẫu có tồn tại
- 24. CMake kiểm tra xem tệp cục bộ có tồn tại
- 25. RavenDb kiểm tra xem chỉ mục có tồn tại
- 26. Kiểm tra xem tệp có tồn tại trong Yii
- 27. kiểm tra xem hình ảnh có tồn tại không php
- 28. Kiểm tra xem một webservice có tồn tại
- 29. Kiểm tra xem khóa đăng ký có tồn tại không?
- 30. Kiểm tra xem phần tử có tồn tại trong DIV
Đóng nhưng tốt hơn để sử dụng 'exist()'. :) – jathanism
Tôi đã thêm rằng, nhưng tại sao nó "tốt hơn"? –
@Peter Nó là tốt hơn bởi vì nó chỉ cần tìm hàng đầu tiên phù hợp với điều kiện 'where' trong khi' rowcount' sẽ phải lấy tất cả các hàng. –