Python,在多个函数中共享 mysql 连接 - 传递连接或光标?

Python, sharing mysql connection in multiple functions - pass connection or cursor?

我正在主函数中打开 mysql 连接,并在主函数调用的多个函数中使用该连接。

从main函数传递游标而不是传递连接有什么问题吗?

即:

从主函数传入游标

def main():
    conn = pymysql.connect(...)
    with conn as cursor:
        func1(cursor)
        func2(cursor)
    conn.close()

def func1(cursor):
    cursor.execute('select ...')

def func2(cursor):
    cursor.execute('insert ...')

从主函数传入连接

def main():
    conn = pymysql.connect(...)
    func1(conn)
    func2(conn)
    conn.close()

def func1(conn):
    with conn as cursor:
        cursor.execute('select ...')

def func2(conn):
    with conn as cursor:
        cursor.execute('insert ...')

答案来自Law of Demeter:传递光标。

这也会导致代码略短。在这种情况下,它非常微不足道,但有时可能会很多(例如,传递数据库名称与传递游标)。