📜  使用Python更改 SQLite 连接超时

📅  最后修改于: 2022-05-13 01:55:50.233000             🧑  作者: Mango

使用Python更改 SQLite 连接超时

在本文中,我们将讨论如何在从Python连接时更改 SQLite 连接超时。

什么是连接超时及其原因?

连接超时是当服务器响应用户请求的时间过长时发生的错误。

当有多个活动连接到数据库并且其中一个正在执行涉及修改存储数据的操作时,通常会发生连接超时。在这种情况下,其他连接必须等到该操作完成后才能执行自己的操作。当等待时间超过时间限制时,会导致连接超时。

更改连接超时值

这是一个示例Python代码片段,它使用 sqlite3 包创建并连接到数据库,然后输出其版本。

方法



  • 首先,导入内置的 sqlite3 包。
  • 接下来,我们使用连接器类的connect 方法连接到数据库,将其名称作为参数传递。
  • 之后,使用连接器类的游标对象,我们必须创建一个可以执行我们查询的游标实例。
  • 然后 execute 方法执行查询并返回结果。
  • 然后使用fetchall方法从游标中提取结果。
  • 最后,无论查询是否成功执行,数据库游标和连接都必须关闭。
Python3
# import module
import sqlite3
  
try:
    # esatblish connecyion
    sqliteConnection = sqlite3.connect('sqlite.db')
      
    # create cursor objrct
    cursor = sqliteConnection.cursor()
    print('Database Initialization and Connection successful')
      
    # display version
    query = 'select sqlite_version();'
    cursor.execute(query)
      
    # get data
    record = cursor.fetchall()
    print(f'SQLite Version - {record}')
    cursor.close()
  
except sqlite3.Error as error:
    print('Error occured - ', error)
      
finally:
    # If the connection was established then close it
    if sqliteConnection:
        sqliteConnection.close()
        print('SQLite Connection closed')


Python3
# import module
import sqlite3
  
try:
    # esatblish connecyion
    sqliteConnection = sqlite3.connect('sqlite.db', timeout=20)
  
    # create cursor objrct
    cursor = sqliteConnection.cursor()
    print('Database Initialization and Connection successful')
  
    # display version
    query = 'select sqlite_version();'
    cursor.execute(query)
  
    # get data
    record = cursor.fetchall()
    print(f'SQLite Version - {record}')
    cursor.close()
  
except sqlite3.Error as error:
    print('Error occured - ', error)
  
finally:
      
    # If the connection was established then
    # close it
    if sqliteConnection:
        sqliteConnection.close()
        print('SQLite Connection closed')


输出:

通常,上面的代码片段可以正常工作。但是,当数据库已经被另一个进程使用时,它必须等到该进程的查询得到解决,然后才能执行自己的查询。如果该等待时间超过连接超时值,则会导致连接超时。

连接超时的默认值为5 秒。但是它可以在connect()方法本身中更改。它接受一个可选参数timeout ,该参数接受以秒为单位的连接超时值。代码片段现在已修改为具有20 秒的连接超时。

蟒蛇3

# import module
import sqlite3
  
try:
    # esatblish connecyion
    sqliteConnection = sqlite3.connect('sqlite.db', timeout=20)
  
    # create cursor objrct
    cursor = sqliteConnection.cursor()
    print('Database Initialization and Connection successful')
  
    # display version
    query = 'select sqlite_version();'
    cursor.execute(query)
  
    # get data
    record = cursor.fetchall()
    print(f'SQLite Version - {record}')
    cursor.close()
  
except sqlite3.Error as error:
    print('Error occured - ', error)
  
finally:
      
    # If the connection was established then
    # close it
    if sqliteConnection:
        sqliteConnection.close()
        print('SQLite Connection closed')

输出:

在上面的例子中, Python程序将连接到 SQLite 数据库 20 秒,因为connect()方法中的超时参数被分配为 20。这样,从Python连接时,可以更改 SQLite 连接超时。