递归函数中数据库连接的最佳实践?

时间:2016-01-16 17:30:41

标签: python mysql database recursion

我有一个递归的python函数,它处理数据并需要从函数内部将数据写入mysql数据库。

我通常连接到像这样的mysql DB

def MyFunc(x, y):
    conn = mysql.connector.connect(
        user = "myuser",
        password = "SuperSecretPassword",
        host = "127.0.0.1",
        database = "MyDatabase")

    # Process some data here, then write it to the DB

    cursor = conn.cursor() 
    cursor.execute("INSERT INTO table a, b, c VALUES(1,2,3)")
    conn.commit()

    MyFunc(x, y)

虽然这有效,但如果我在我的函数中这样做,我将创建数百个(如果不是数千个)与我的mysql数据库的连接,具体取决于递归在我处理的数据中的深度。这似乎是一个非常糟糕的主意。

我尝试在函数外部的代码的主要部分创建连接和光标,然后在函数内引用它们就像一个全局变量:

global cursor.execute("INSERT INTO table a, b, c VALUES(1,2,3)")
global conn.commit()

但这没效果。

是否可以在这样的递归函数中写入python中的数据库,只打开1个与DB的连接?

1 个答案:

答案 0 :(得分:2)

为什么不在Python模块中保留单个连接,例如:

# script.py

conn = mysql.connector.connect(
        user = "myuser",
        password = "SuperSecretPassword",
        host = "127.0.0.1",
        database = "MyDatabase")


def MyFunc(x, y):

    # Process some data here, then write it to the DB

    cursor = conn.cursor() 
    cursor.execute("INSERT INTO table a, b, c VALUES(1,2,3)")
    conn.commit()

    MyFunc(x, y)