2016-12-20 2 views
0

내가장고 양식 : 모든 인수 내가 저장 프로 시저를 사용하고

DATABASES = { 
'default': { 
    'NAME': ' Name', 
    'ENGINE': 'sql_server.pyodbc', 
    'SERVER': 'server', 
    'USER': 'sa', 
    'PASSWORD': 'password', 

    'OPTIONS': 
    { 
    'driver_supports_utf8': True, 
     'autocommit': True, 
     'unicode_results': True, 
     'host_is_server':True, 
     'driver': 'SQL Server Native Client 11.0', 
     } 
    } 
    } 

다음 설정 2014.Using SQL 서버에 기존 윈도우 응용 프로그램과 함께 바로 웹 응용 프로그램을 개발하고 있어요 포맷 문자열 중에 변환 형태

File "c:\python35\lib\site-packages\django\db\backends\utils.py", line 79, in execute return super(CursorDebugWrapper, self).execute(sql, params) File "c:\python35\lib\site-packages\django\db\backends\utils.py", line 64, in execute return self.cursor.execute(sql, params) File "c:\python35\lib\site-packages\sql_server\pyodbc\base.py", line 535, in execute sql = self.format_sql(sql, params) File "c:\python35\lib\site-packages\sql_server\pyodbc\base.py", line 503, in format_sql sql = sql % tuple('?' * len(params)) TypeError: not all arguments converted during string formatting

을 실행하는 동안 기존의 기능

class Viewpatform(forms.Form): 
Name = forms.CharField(max_length=100) 
Phone_Number = forms.IntegerField(label='Phone Number', required=True) 
Sex = forms.ChoiceField(widget=forms.Select(choices=sexchoice)) 
Age = forms.IntegerField(label='Age') 
AgeType = forms.ChoiceField(choices=Agetype, required=True, label='Type') 
Address = forms.CharField(max_length=500, required=False) 
Registration_Date = forms.DateField(label='Registration Date') 
with connection.cursor() as cursor: 
    cursor.execute(''' EXEC dbo.insert_patients @Name = ?, -- varchar(100) 
    @Phone_Number = ?, -- int 
    @Age = ?, -- int 
    @AgeType = ?, -- int 
    @Address = ?, -- varchar(200) 
    @sex = ? -- varchar(2) 
     ''', [ Name, Phone_Number, Sex, Age, AgeType, Address]) 

를 사용하는 내 장고 응용 프로그램에서 나는 다음과 같은 오류를 받고있다 16,

장고 버전 1.10 윈도우 7 64 비트 장고 - Pyodbc - 푸른 : 버전 : 1.10.4.0 파이썬 3.5

+0

왜 이런 간단한 삽입을위한 저장 프로 시저를 작성 했습니까? 당신이 달성하는 것은 일을 다소 복잡하게 만드는 것입니다. 우리는 환상적인 ORM이 있기 때문에 일반적으로 django에서 커서를 사용하지 않습니다. 그 커서 기반 인서트는 Django ORM을 사용하는 하나의 라이너입니다 – e4c5

+0

@ e4c5 기존의 모든 저장 프로 시저를 사용하고 있습니다. 새로운 응용 프로그램에 따라 모델을 재구성하지 않고 기존 웹 응용 프로그램을 향상시키고 on, 나는 SPs를 사용하여 그들을 커버 할 수있을 것이다. –

+0

간단한 insert를위한 저장 프로 시저를 작성하는 요령은 무엇인가? 저장 프로 시저를 호출하는 코드는 ORM에 삽입 할 하나의 라이너보다 복잡합니다. 죄송합니다. – e4c5

답변

0

귀하의 인수는 순서가 될 것으로 보인다. 당신은 물음표 장소 홀더와 같은 순서로 매개 변수의 목록에 인수를 전달해야합니다 : 당신은 정수로 문자열과 문자열로 정수를 통과하고 있기 때문에

cursor.execute(
    ''' 
     EXEC dbo.insert_patients 
      @Name = ?, -- varchar(100) 
      @Phone_Number = ?, -- int 
      @Age = ?, -- int 
      @AgeType = ?, -- int 
      @Address = ?, -- varchar(200) 
      @sex = ? -- varchar(2) 
    ''', 
    [Name, Phone_Number, Age, AgeType, Address, Sex] 
) 

당신은 AFAIK, 오류가 있어요. 행운을 빕니다!