首页 > 解决方案 > 将变量定义为数据库游标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 都会生成一个警告:

在“无”中找不到参考“执行”

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

代码可以正常工作,但这些警告有点烦人!我应该如何编写代码以便 PyCharm 知道它将成为数据库游标并停止这些警告?

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

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

在“ init .py | ”中找不到引用“扩展” 初始化.py'

标签: pythonpycharmpsycopg2python-typing

解决方案


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

import psycopg2
from psycopg2 import extensions

dc_cursor: psycopg2.extensions.cursor


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

推荐阅读