将变量定义为数据库游标 python

Define variable as database cursor python

我使用 psycopg2 编写了一个模块来管理我的程序的数据库。

import psycopg2

db_cursor = None


def connect() -> bool:
    global db_cursor
    try:
        db = psycopg2.connect(os.environ.get('DATABASE_URL'))
        db.autocommit = True
        db_cursor = db.cursor()
        logging.info('Connected to database')
        return True
    except psycopg2.Error:
        logging.exception('Error while connecting to database')
        return False


def insert() -> bool:
    global db_cursor
    try:
        db_cursor.execute(
            'INSERT INTO TABLE ...'
        )
        return True
    except psycopg2.Error:
        logging.exception('Error while adding new entry to database')
        return False

# Other database functions which use 'global db_cursor'...

对于每个 db_cursor.execute(),PyCharm 生成一个警告:

Cannot find reference 'execute' in 'None'

我知道这是因为我最初将 db_cursor 设置为 None 而 PyCharm 不知道它将成为数据库游标对象。

代码运行没有任何问题,但那些警告有点烦人!我应该如何编写代码以便 PyCharm 知道它将成为数据库游标并停止这些警告?

我尝试使用 variable: type (PEP 526) 语法,但我不知道如何将类型设置为 cursor

更新: 我尝试了 a = type(db_cursor) 并且调试器将 a 显示为“psycopg2.extensions.cursor”;但是当我写 db_cursor: psycopg2.extensions.cursor PyCharm 时显示另一个警告:

Cannot find reference 'extensions' in 'init.py | init.py'

我找到了答案。我导入了 psycopg2.extensions 并将光标定义为 dc_cursor: psycopg2.extensions.cursor 并抑制了所有警告。

import psycopg2
from psycopg2 import extensions

dc_cursor: psycopg2.extensions.cursor


def connect() -> bool:
    global db_cursor
    # ...