python - 将变量定义为数据库游标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_cursor
为None
PyCharm 不知道它将成为数据库游标对象。
代码可以正常工作,但这些警告有点烦人!我应该如何编写代码以便 PyCharm 知道它将成为数据库游标并停止这些警告?
我尝试使用variable: type
(PEP 526) 语法,但我不知道如何将类型设置为cursor
.
更新:我试过a = type(db_cursor)
调试器显示a
为“psycopg2.extensions.cursor”;但是当我写db_cursor: psycopg2.extensions.cursor
PyCharm 时显示另一个警告:
在“ init .py | ”中找不到引用“扩展” 初始化.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
# ...
推荐阅读
- c# - 如何合并两个字典但在重复键上合并 C# 中的值?
- javascript - 如何在运行时在表单生成器中使用 I18n 和 Json Schema?
- database - 如何将mongo基础从本地文件夹恢复到uri
- node.js - “id”参数必须是字符串类型。接收到的类型对象
- javascript - 带有动画轮子的计时器和屏幕锁定错误
- python - 如何重命名将使用以下程序下载的 .wav 文件?
- java - 在 MacOSX 上安装 `rJava` 失败并显示“JDK 不完整!...”
- sql-server - 探索存储过程并添加更多参数
- spring-roo - 在 STS 4.6.1 中安装 Spring Roo 时出现问题
- php - 使用 php 中的 PDO 查询在响应为空时跳过 foreach 循环