Microsoft SQL 2005 데이터베이스를 쿼리하고 데이터를 처리하며 내 컴퓨터의 로컬 sqllite3 데이터베이스 저장소로 업데이트 한 데이터에 키를 쓰려고합니다.파이썬을 사용하여 mssql의 sqlite3에 바이너리 데이터를 삽입 할 수 없습니다.
내가 사용하는 도구는 python 2.7, pyodbc 및 sqllite3입니다. 나는 창 7에 있고 드라이버는 pyodbc와 SQL 서버와 SQL 네이티브 클라이언트 드라이버를 사용하여 내 mssql db에 연결을 시도하고 모두 동일한 결과를 얻을 수 있습니다.
문제는 mssql에서 이진 (16) Uuid 필드입니다. pyodbc를 사용하여 데이터를 쿼리 할 때 bytearray()로 다시 돌아옵니다.
이것은 다음을 실행할 때 출력됩니다.
id = mycursor.fetchone()
print id
AO ÷ EAO <1ÝWt'E
repr(id)
된 ByteArray (b '\ xe0O \ xf7 \ x1d \ x9de \ xc5O \ x8b1 \ x0e \ xddWt \ x91E')
sqllite3 데이터베이스에 해당 ID를 삽입하려면 다음과 같이하십시오.
s = sqlite3.connect('tmp.db')
cursor = s.cursor()
s.execute("create table recs(uuid blob)")
s.commit()
s.execute("insert into recs (uuid) values(?)", id)
1 s.execute ("RECS 삽입 (UUID) 값()?", ID)
ProgrammingError : 공급 바인딩 잘못된 번호. 현재 명령문은 1을 사용하고 16 개가 제공됩니다.
, 그 작품! 나는 둘러싼 괄호를 놓치고 있었다. 정말 고맙습니다 ! – Josh
MRAB 몇 가지 연구를했는데 왜 버퍼가 필요한지 알 수 있지만 터플에 있어야하는 이유는 여전히 불분명합니다. – Josh
'execute' 메소드는 플레이스 홀더가 튜플에 있어야합니다. 이 경우에는 1 개의 자리 표시자가 있으므로 1-tuple의 값이 필요합니다. – MRAB