Django - 与外部数据库的永久连接

时间:2015-12-07 09:03:59

标签: python django database-connection

迭代将记录添加到本地数据库时,我需要连接到外部数据库以导入数据。这需要很长时间。我得到的印象是,原因是在每次循环迭代期间创建一个新连接。是否可以永久设置与外部数据库的连接?

def setup_cursor():
    try:
        cursor = connections['legacy'].cursor()
        return cursor
    except ConnectionDoesNotExist:
        print "Legacy database is not configured"
        return None


def make_query(sql):
    cursor = setup_cursor()
    if cursor is None:
        return
    cursor.execute(sql)
    rows = cursor.fetchall()
    if rows is None:
        return
    return rows

def get_external_data(var):
    sql = "...."
    result = make_query(sql.format(var))
    return result

# adding records to local db
for x in y:
    add_row = SomeModel (field1=xxx, field2=get_external_data(var))
    add_row.save()

1 个答案:

答案 0 :(得分:0)

在数据库设置中将CON_MAX_AGE设置为None

  

持久连接

     

默认值为0,保留关闭的历史行为   每个请求结束时的数据库连接。启用   持久连接,将CONN_MAX_AGE设置为正数   秒。对于无限制的持久连接,请将其设置为“无”。

E.g

DATABASES = {
    'legacy': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydatabase',
        'USER': 'mydatabaseuser',
        'PASSWORD': 'mypassword',
        'HOST': '127.0.0.1',
        'PORT': '5432',
        'CONN_MAX_AGE': None,
    }
}

这是一个应该完成这项工作的课程:

class LegacyDatabase(object):
    cursor = None

    def __init__(self):
        try:
            self.cursor = connections['legacy'].cursor()
        except ConnectionDoesNotExist:
            print "Legacy database is not configured"

    def query(self, param):
        query = 'your query'
        if self.cursor:
            self.cursor.execute(query.format(param))
            return self.cursor.fetchall()

现在在您的代码中使用db.query(param)来查询您的旧数据库   E.g

db = LegacyDatabase()
# adding records to local db
for x in y:
    add_row = SomeModel (field1=xxx, field2=db.query(param))
    add_row.save()

阅读Django documentation - conn-max-age了解更多信息