2013-10-27 4 views
0

파이썬에서 서식을 사용하여 쿼리를 만들려고하고 있는데, 어떻게 데이터에 대한 이진 입력을 이스케이프 처리 할 수 ​​있는지 알 수 없습니다. 다음과 같이 반환됩니다.파이썬 서식 지정 문자열 이스케이프

INSERT INTO pythonUDP (Packet, Destination, Source, Protocol, Version, Header_Length, TTL, Protoco l_UDP, Target, Source_Port, Destination_Port, Length) VALUES (NULL, '00 : 0 C 29 : B2 : 14 : 0C ','192.168.178.50 ', '8', '4', '20', '128', '17', '192.168.178.24', '52371', '8888', '29227', 'bData \ x00 \ x00 \ x00 \ x00 \ x00에서 \ x00에서 \ x00에서 \ x00에서 \ x00에서 \ x00에서 \ x00에서 \ x00에서 \ x00에서 \ x00부터 '');)

어떻게 제대로 파이썬에서 서식 이진 문자열 값을 탈출 할 수 있습니까?

def setopUDP(destination, source, protocol, version, header_length, ttl, protocolEGP, target, source_port, destination_port, length, data): 
query = ("INSERT INTO `python`.`UDP` (`Packet`, `Destination`, `Source`, `Protocol`, " 
     "`Version`, `Header_Length`, `TTL`, `Protocol_UDP`, `Target`, `Source_Port`, " 
     "`Destination_Port`, `Length`) VALUES (NULL, '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}');)" 
     .format(destination, source, protocol, version, header_length, ttl, protocolEGP, target, source_port, destination_port, length, data)) 


setopCON(query) 
+0

로 감소 어떤 데이터베이스 어댑터를 사용하고 있습니까? –

답변

2

SQL 쿼리에 형식을 사용하지 마십시오. SQL 매개 변수 을 대신으로 사용하십시오.

데이터베이스 어댑터가 이진 데이터를 처리 할 수 ​​있다면의 경우 사용자가 을 이스케이프 처리합니다.

SQL 매개 변수의 형식을 지정하는 방법은 사용되는 데이터베이스에 따라 다릅니다. sqlite3를이 ? 자리 사용

query = ("INSERT INTO `python`.`UDP` (`Packet`, `Destination`, `Source`, `Protocol`, " 
     "`Version`, `Header_Length`, `TTL`, `Protocol_UDP`, `Target`, `Source_Port`, " 
     "`Destination_Port`, `Length`) VALUES (NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?))") 

을 당신은 cursor.execute() 방법에 대한 두 번째 인수로 값 목록을 전달 것 : 당신은 당신의 데이터베이스 어댑터 설명서에서 확인해야합니다

cursor.execute(query, 
    (destination, source, protocol, version, header_length, ttl, protocolEGP, target, source_port, destination_port, length, data)) 

무엇 style of SQL parameters (?, %s, :1, :name 또는 %(name)s 중 하나 이상) 및 이진 값 처리 방법이 지원됩니다.

이진 값을 전혀 처리하지 않으면 해당 이진 값을 유니 코드 값으로 디코딩해야합니다. 아마도 base64 인코딩을 사용하거나 Latin-1에서 디코딩하여 일대일 변환을 유니 코드 코드 포인트로 가져올 수 있습니다.

6

그냥 경우 누군가에이 주제를 검색하고 이것은 당신이 "형식"에 대한 탈출 할 방법입니다

를 여기까지 이끌어있어 :

>>> "{{}}{}".format(10) 
'{}10' 

때문에, {{}}가 탈출 {}