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:传递光标。
这也会导致代码略短。在这种情况下,它非常微不足道,但有时可能会很多(例如,传递数据库名称与传递游标)。
我正在主函数中打开 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:传递光标。
这也会导致代码略短。在这种情况下,它非常微不足道,但有时可能会很多(例如,传递数据库名称与传递游标)。