Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sqlite3集合\授权器方法的故障_Python_Sqlite - Fatal编程技术网

Python sqlite3集合\授权器方法的故障

Python sqlite3集合\授权器方法的故障,python,sqlite,Python,Sqlite,我正在尝试使用连接。将\u authorizer方法设置为仅允许对连接对象执行某些DB操作。(文件为) 我正在使用此代码测试: import sqlite3 as sqlite def select_authorizer(sqltype, arg1, arg2, dbname): print("Test") return sqlite.SQLITE_OK #should allow all operations conn = sqlite.co

我正在尝试使用
连接。将\u authorizer
方法设置为仅允许对连接对象执行某些DB操作。(文件为)

我正在使用此代码测试:

import sqlite3 as sqlite

def select_authorizer(sqltype, arg1, arg2, dbname):  
    print("Test")  
    return sqlite.SQLITE_OK  #should allow all operations           

conn = sqlite.connect(":memory:")
conn.execute("CREATE TABLE A (name integer PRIMARY KEY AUTOINCREMENT)")
conn.set_authorizer(select_authorizer)
conn.execute("SELECT * FROM A").fetchall() #should still work
这给了我一个
sqlite3.DatabaseError:notauthorized
,没有打印出“Test”。我猜我可能设置了我的授权人,但它甚至没有调用它。(尽管错误消息确实没有传达这一点)但根据文档,此设置看起来是正确的


编辑:将
sqlite.sqlite\u好的
更改为
sqlite.sqlite\u好的
,但由于该方法似乎根本没有被调用,因此毫不奇怪,这没有任何帮助。

授权者回调需要5个参数,但您只接受四个:

回调的第一个参数表示要授权的操作类型。第二个和第三个参数将是参数或无参数,具体取决于第一个参数。第四个参数是数据库的名称(“main”、“temp”等)(如果适用)。第5个参数是负责访问尝试的最内部触发器或视图的名称,如果此访问尝试直接来自输入SQL代码,则为“无”

因此,签名应为:

通常,在测试这样的回调时,使用
*args
通配符参数可以简化测试:

def select_authorizer(*args):
     print(args)
     return sqlite.SQLITE_OK
上面的回调输出:

(21, None, None, None, None)
(20, 'A', 'name', 'main', None)
当我运行测试
时,选择


有关使用的各种常数,请参见和。

Martijn Pieter的答案是正确的;当我读到那一段时,不知怎的错过了第五个论点

我还发现,通过更仔细地阅读文档,可以真正帮助我自己弄明白这一点的是:
sqlite.enable\u callback\u traceback(True)

此行将导致sqlite打印回调函数中发生的错误的回溯

(21, None, None, None, None)
(20, 'A', 'name', 'main', None)