Python调用Neo4j driver.session报TypeError:需1个位置参数但传2个
报错原因
- Python类实例方法调用时,会自动把当前实例作为第一个位置参数
self传入方法。执行driver.session("WRITE")时,实际传递进方法的位置参数共2个:第一个是自动传入的driver实例(对应方法定义里的self),第二个是手动传入的字符串"WRITE"。 - 4.0及以上版本的Neo4j Python驱动修改了
session()方法的签名:除自动传入的self外,不接受任何位置形式的传参,所有配置项(包括访问模式、目标数据库等)都被设为关键字专属参数——方法定义中用*做了参数分隔,分隔符后的参数只能通过参数名=值的关键字形式传递,不能按位置传入,因此传入位置参数"WRITE"时会触发参数数量不匹配的报错。 - 网上部分旧教程基于3.x及更早版本的驱动编写,旧版本确实支持将访问模式作为第一个位置参数直接传入,但该写法在4.0版本接口升级时已被废弃。
解决方法
不要直接传字符串形式的访问模式,按如下方式调整:
- 导入驱动内置的访问模式常量,避免手动写字符串出现拼写问题:
from neo4j import WRITE_ACCESS
- 创建session时,通过关键字参数形式指定默认访问模式:
session = driver.session(default_access_mode=WRITE_ACCESS)
如果需要指定连接的目标数据库,同样通过关键字参数追加即可,示例:
session = driver.session(default_access_mode=WRITE_ACCESS, database="neo4j")
内容的提问来源于stack exchange,提问作者Lakeside52
相关产品推荐
相关产品推荐

