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