2014-10-17 3 views
0

web2py 프레임 워크 사용 파일 유형 입력을 통해 파일을 선택하고 그 내용을 MySQL BLOB 유형 필드에 저장하려고합니다. 파일에 2 진 데이터가 들어 있습니다.web2py를 사용하여 MySQL에 BLOB 저장

연결 관리에 DAL을 사용해야하지만이 작업을 수행하는 SQL 프로 시저가 있습니다. 문제는 아래에서 SQL 구문 오류가 발생하는 것입니다.

f = form.vars.element.file.read() 
db.executesql("CALL someproc('" + f + "');") 

여러 가지 방법으로 원시 바이너리를 삽입하려고 시도했지만 동일하거나 유사한 오류가 발생했습니다. 내가 직접처럼 MySQLdb를 사용하려고했습니다

f = form.vars.element.file.read() 
db.cursor().execute("CALL someproc('" + f + "');") 
db.commit() 

이 완벽하게 작동하지만 문제는 여전히 열려 그래서 나는 위의 DAL 버전을 사용해야합니다.

나는 운 좋게도이 일을 해결하는데 3 일을 보냈다. :( 도와주세요!

답변

0

을 나는 DAL.executesql 방법은 궁극적으로 정확히 같은 방식으로 cursor().execute()를 호출하는 두 번째 예는 주어진, 왜 작동하는지 모르겠어요. 어떤 경우에는, 당신과 함께 후자의 구문을 사용하려는 경우 web2py DAL 객체, 당신은 db._adaptor.cursor를 통해 커서를 액세스 할 수 있도록 두 번째 예로 변경 다음과 같습니다.

db._adapter.cursor.callproc('someproc', (f,)) 
:

db = DAL('mysql://...') 
db._adapter.cursor.execute("CALL someproc('" + f + "');") 

또 다른 옵션은 .callproc 방법을 사용할 수 있습니다 6,

참고 db.executesql()도 자리한다 :

db.executesql('...WHERE name=%s', ('Mary',)) 

을하지만 난 그 저장 프로 시저에 인수를 전달하는 일하는 것이 확실하지 않다.

+0

그것은 솔기 db._adapter.cursor.callproc (...)에서 트릭을 했어! 고마워! – RawBits

+0

질문에'db.cursor(). execute ("CALL someproc ('+ f +"'); ")'가 사용되었습니다. 이 코드에서'db'는'MySQLdb' 연결 객체입니까? 그렇다면'db._adapter.cursor.execute ("CALL someproc ('"+ f + "');")'도 호출 할 것이고 궁극적으로는'cursor(). execute()'를 호출 할 것입니다. – Anthony

+0

나에게 파이썬 문자열 처리 문제가 될 솔기가있다. 나는 DAL을 통해 커서를 직접 사용하는 것이 같지만 어쨌든 그것은 그렇지 않다는 것을 알았습니다. – RawBits