PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Đơn giản hóa việc sử dụng cơ sở dữ liệu (psycopg2) bằng cách tạo một mô-đun

Vấn đề chính của bạn, là mỗi biến bị giới hạn trong hàm bạn đã viết nó.
Trừ khi được khai báo như vậy:

def db_init():
    global conn
    conn = psycopg2....

Một cách tiếp cận tốt hơn sẽ là chuyển đổi này thành một lớp, một ví dụ cơ bản sẽ là:

import psycopg2

class MyDatabase():
    def __init__(self, db="mydb", user="postgres"):
        self.conn = psycopg2.connect(database=db, user=user)
        self.cur = self.conn.cursor()

    def query(self, query):
        self.cur.execute(query)

    def close(self):
        self.cur.close()
        self.conn.close()

db = MyDatabase()
db.query("SELECT * FROM table;")
db.close()

Bây giờ, SELECT truy vấn sẽ không hiệu quả nhiều vì bạn đang sử dụng cur.execute() .
Nhưng tôi cố ý giữ điều này để giữ cho mã tương tự như những gì bạn đã viết, bạn sẽ muốn hoán đổi mã đó để trả về các giá trị tuy nhiên nếu gọi một truy vấn được mong đợi trả về một giá trị, v.v. / P>

Cách tiếp cận của bạn tập trung vào các hàm sẽ có vấn đề về "không gian tên" trong đó các biến nằm trong phạm vi cục bộ của hàm đó và ở đó các hàm khác thường không thể truy cập chúng.

Thay vào đó, các biến trong phạm vi lớp có thể truy cập các biến của chính nó và ở đó không giới hạn.

Bạn có thể tạo các biến toàn cục và khai báo chúng là toàn cục trong các hàm, nhưng tôi nghĩ như tôi đã đề cập trong một nhận xét:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chỉ mục PostgreSQL trên JSON

  2. Ai đó có thể giải thích SQL này không? (và làm cách nào để tôi có thể 'tham số hóa' nó và gọi dưới dạng một hàm?)

  3. Cắt tỉa phân vùng dựa trên ràng buộc kiểm tra không hoạt động như mong đợi

  4. Không thể kết nối với vùng chứa Postgres docker từ vùng chứa Golang

  5. PGError:Lỗi:cột quan hệ không tồn tại