

調べてみたのですが、単純にロック状態かどうかを判断する方法にたどり着けませんでした。  
ご存知の方にご教示賜りたいと思います。

#### 目的：

データベースファイルがロック状態であれば、実行を停止して警告を出す。  
データベースファイルアクセス開始時にすでにロック状態であるかを確認したい。  
（具体的にはconnectコマンド前後の時点。）

#### 状況：

データベースファイルをユーザーが直接開いて、DB
Browserなどで編集している場合、永続的に書き換えができないので、アプリケーション動作を停止して、警告を出す必要があります。

#### 問題点：

下記のサンプルコードのように、書き換えのコマンドinsertやupdateのクエリ実行時に、OperationalError
例外で警告を出すのでは遅すぎます。

#### ソースコードサンプル

[code]

    import sqlite3
    
    path = "./test.db"
    
    '''
    CREATE TABLE "TestTbl" (
        "pkey"  INTEGER NOT NULL UNIQUE,
        "name"  TEXT,
        PRIMARY KEY("pkey" AUTOINCREMENT)
    )
    '''
    
    db = sqlite3.connect(path)
    
    cursor = db.cursor()
    
    sql_cmd = "select * from TestTbl"
    
    cursor.execute(sql_cmd)
    res = cursor.fetchall()
    
    print(res)
    
    sql_cmd = 'insert into TestTbl (name) VALUES ("test") '
    
    try:
        cursor.execute(sql_cmd)
    except sqlite3.OperationalError as e:
        raise e
    
    db.commit()
    db.close()
    
[/code]


CC BY-SA 4.0
2022-05-11T06:23:50.033
88757
2022-05-14T11:39:08.123
2022-05-14T11:39:08.123
3060
32891
question
python sqlite
SQLite3 でデータベースファイルがロックされているかを確認する方法は？