내가 가진 것이 '연결'객체 일 때 적절한 '매개 변수'를 어떻게 결정합니까?

StackOverflow https://stackoverflow.com/questions/1471304

  •  16-09-2019
  •  | 
  •  

문제

나는 a의 인스턴스가 있습니다 Connection (DB API 2.0을 준수해야 함)이지만 가져온 모듈이 없습니다. 문제는 이름이 지정된 매개 변수를 사용하려고한다는 것입니다. paramstyle 사용.

부터 paramstyle 모듈 수준 상수입니다. Connection. 나는 사용을 시도했다 inspect.getmodule()Connection 인스턴스이지만 방금 돌아 왔습니다 None. 내가 놓친 쉬운 방법이 있습니까, 아니면 몇 가지를해야합니까? try/except 어느 것을 결정하기위한 코드 paramstyle 사용?

도움이 되었습니까?

해결책

통과하다 type(connection) (연결 클래스)까지 inspect.getmodule(), 연결 객체가 아닙니다. 클래스는 정의 된 모듈을 추적합니다. inspect 객체 생성은 추적되지 않지만 찾을 수 있습니다.

다른 팁

인스턴스는 어디서 얻었습니까? 나는 당신이 연결의 출처를 미리 알지 못하는 상황을 상상할 수 없습니다. 라이브러리 사용자가 연결을 통과하는 경우 매개 변수를 요청하십시오.

어쨌든 다음 콘솔 세션을보십시오.

>>> import sqlite3
>>> c = sqlite3.connect('/tmp/test.db')
>>> c
<sqlite3.Connection object at 0xb7db2320>
>>> type(c)
<type 'sqlite3.Connection'>
>>> type(c).__module__
'sqlite3'
>>> import sys
>>> sys.modules[type(c).__module__].paramstyle
'qmark'

그러나 그것은 짜증납니다. 나는 잠시 동안조차도 의존하지 않을 것입니다. 나는 내 자신의 연결과 같은 객체를 사용하고 있으며 그 중 하나를 라이브러리로 전달하고 싶습니다. 나는 그것이 매개 변수를 마술처럼 찾아 내려고 할 때 그것을 싫어하고 연결과 같은 래퍼 객체를 사용하고 있기 때문에 실패합니다.

당신은 할 수 없습니다.

당신은 보면 시도 할 수 있습니다 connection.__class__.__module__, 그러나 DB-API에 의해 지정되지는 않습니다. 실제로 많은 일반적인 경우에는 그렇지 않습니다. (예 : 클래스는 DB-API 모듈 객체 역할을하는 패키지의 하위 모듈로 정의되거나 클래스는 C 확장자입니다. __module__.)

불행한 일이지만 DB-API 연결 객체와 함께 DB-API 모듈 객체에 대한 참조를 전달해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top