2014-04-23 2 views
0

파이썬 3.3에서 pymssql을 사용하여 Mssql db와 통신합니다. 그리고이 데이터베이스에 튜플에서 사용자로부터 데이터를 저장하기 위해 노력하고 있어요,하지만 난이 이상한 오류가 계속 :튜플을 mssql 데이터베이스에 삽입 할 수 없습니다

pymssql.ProgrammingError: (102, b"Incorrect syntax near '\\'.DB-Lib error message 102, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\n") 

내 방법을, 오류가 마지막 줄에 표시됩니다 :

user.password = user.password.encode('utf_8') 
    user.password = encrypt_RSA(user.password) 

    cursor.execute('INSERT INTO Usertable VALUES(%i, \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\')' % user.get_usertuple()) 
내가 잘못 여기서 뭐하는 거지

def encrypt_RSA(message, public_key_loc = "pubkey.pem"): 
    ''' 
    param: public_key_loc Path to public key 
    param: message String to be encrypted 
    return encoded encrypted string 
    ''' 
    key = open(public_key_loc, "r").read() 
    rsakey = RSA.importKey(key) 
    rsakey = PKCS1_OAEP.new(rsakey) 
    encrypted = rsakey.encrypt(message) 
    return encrypted 

사람이 말할 수 :

나는 그것이 인코딩 할 수있는 뭔가 및 암호화를 가지고 의심? 그리고 그것을 고치는 방법?

편집 : 내 쿼리는 이제 다음과 같습니다

cursor.execute('INSERT INTO Usertable VALUES(%i, %s, %s, %s, %s, %s, %s)' % user.get_usertuple()) 

But that gives me another error: pymssql.OperationalError: (103, b"The identifier that starts with (LONG TEXT) is too long. Maximum length is 128.DB-Lib error message 103, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\nDB-Lib error message 102, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\n") 
+0

cursor.execute를 실행하는 대신 쿼리를 인쇄하여 쿼리가 올바르게 렌더링되는지 확인하려고 했습니까? – frlan

+0

'SQL 서버에서 메시지 확인 '을 했습니까? – njzk2

+0

괜찮 았던 것처럼 보입니다. 문제는 바이트 데이터라는 사실과 관련이 있다고 생각합니다. 비밀 번호는 다음과 같이 출력됩니다 : b'x10 // ... 등. 그리고 나는 아마도 b '가 거기에있는 것과 어떤 문제가 있다고 추측하고 있습니까? –

답변

2

사용 바인드 변수를. 그것은 더 안전합니다, 그것은 DB에 친절합니다.

cursor.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe') 

문자열은 자동으로 적절하게 따옴표로 묶입니다.

+0

EDIT를 참조하십시오, 나는 당신이 의미하는 바를 geussing하고 있습니다. –

+0

나는 쉼표 (,)가 있고 퍼센트 (%)가 있습니다. 차이점은 2 개의 매개 변수를 전달하고 하나만 전달한다는 것입니다 (형식화 된 문자열). 여전히 바인드 변수가 아닙니다. – vav

+0

Jup, 내 문제도 해결되었습니다. 감사 –