PyODBC 需要 6 秒才能与 Azure SQL 服务器建立连接
PyODBC takes 6 seconds to establish a connection with Azure SQL Server
PyODBC 需要大约 7 秒才能与 Azure SQL 服务器建立连接,有没有办法将其最小化?
import os
import sys
import logging, logging.handlers
import getopt
import pyodbc
from database import *
# set up logging
logging.getLogger().setLevel(logging.INFO)
console = logging.StreamHandler()
console.setFormatter(logging.Formatter('%(asctime)s %(name)-12s %(levelname)s %(message)s'))
console.setLevel(logging.INFO)
logging.getLogger().addHandler(console)
logger = logging.getLogger("testapp")
def connect():
return pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
def purgeStoreData(conn, div_id, purge_days, lookback_days, store_start, store_end):
store_list = get_store_list(conn, div_id, store_start, store_end)
cursor = conn.cursor()
for store in store_list:
logger.info("Store %s ...", store)
cursor.execute("some query")
if __name__ == "__main__":
try:
conn = connect()
purgeStoreData(conn, DIV_ID, PURGE_DAYS, LOOKBACK_DAYS, STORE_START, STORE_END)
logger.info("*** Completed succesfully")
finally:
conn.close()
有没有办法显示网络延迟?
能否尝试使用 SQL 服务器的 ODBC 驱动程序 17 进行连接?你可能会发现这种方式更快。
import pyodbc
server = '<server>.database.windows.net'
database = '<database>'
username = '<username>'
password = '{<password>}'
driver= '{ODBC Driver 17 for SQL Server}'
with pyodbc.connect('DRIVER='+driver+';SERVER=tcp:'+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password) as conn:
with conn.cursor() as cursor:
cursor.execute("SELECT TOP 3 name, collation_name FROM sys.databases")
row = cursor.fetchone()
while row:
print (str(row[0]) + " " + str(row[1]))
row = cursor.fetchone()
Python 的 Microsoft 驱动程序是 here。
还请将以下内容添加到连接字符串:“Encrypt=yes;TrustServerCertificate=no;”。当客户端首次尝试连接到 SQL Azure 时,它会发送一个初始连接请求。将此视为“预连接”请求。此时客户端不知道是否需要 SSL/Encryption 并等待来自 SQL Azure 的回答以确定在整个会话(不仅仅是登录序列,整个连接会话)中是否确实需要 SSL。在响应中设置了一个位来表示如此。然后客户端库断开连接并使用此信息重新连接。
当您将“加密连接”设置为“是”时,您避免了“预连接”并且连接速度更快。
此外,请验证您的互联网连接的延迟时间。
PyODBC 需要大约 7 秒才能与 Azure SQL 服务器建立连接,有没有办法将其最小化?
import os
import sys
import logging, logging.handlers
import getopt
import pyodbc
from database import *
# set up logging
logging.getLogger().setLevel(logging.INFO)
console = logging.StreamHandler()
console.setFormatter(logging.Formatter('%(asctime)s %(name)-12s %(levelname)s %(message)s'))
console.setLevel(logging.INFO)
logging.getLogger().addHandler(console)
logger = logging.getLogger("testapp")
def connect():
return pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
def purgeStoreData(conn, div_id, purge_days, lookback_days, store_start, store_end):
store_list = get_store_list(conn, div_id, store_start, store_end)
cursor = conn.cursor()
for store in store_list:
logger.info("Store %s ...", store)
cursor.execute("some query")
if __name__ == "__main__":
try:
conn = connect()
purgeStoreData(conn, DIV_ID, PURGE_DAYS, LOOKBACK_DAYS, STORE_START, STORE_END)
logger.info("*** Completed succesfully")
finally:
conn.close()
有没有办法显示网络延迟?
能否尝试使用 SQL 服务器的 ODBC 驱动程序 17 进行连接?你可能会发现这种方式更快。
import pyodbc
server = '<server>.database.windows.net'
database = '<database>'
username = '<username>'
password = '{<password>}'
driver= '{ODBC Driver 17 for SQL Server}'
with pyodbc.connect('DRIVER='+driver+';SERVER=tcp:'+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password) as conn:
with conn.cursor() as cursor:
cursor.execute("SELECT TOP 3 name, collation_name FROM sys.databases")
row = cursor.fetchone()
while row:
print (str(row[0]) + " " + str(row[1]))
row = cursor.fetchone()
Python 的 Microsoft 驱动程序是 here。
还请将以下内容添加到连接字符串:“Encrypt=yes;TrustServerCertificate=no;”。当客户端首次尝试连接到 SQL Azure 时,它会发送一个初始连接请求。将此视为“预连接”请求。此时客户端不知道是否需要 SSL/Encryption 并等待来自 SQL Azure 的回答以确定在整个会话(不仅仅是登录序列,整个连接会话)中是否确实需要 SSL。在响应中设置了一个位来表示如此。然后客户端库断开连接并使用此信息重新连接。
当您将“加密连接”设置为“是”时,您避免了“预连接”并且连接速度更快。
此外,请验证您的互联网连接的延迟时间。