2016-12-20 1 views
0

Я разработки веб-приложений наряду с приложением существующих окон на сервере SQL 2014.Using следующие параметрыДжанго Формы pyodbc MSSQL TypeError: не все аргументы преобразуются во строки форматирования

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', 
     } 
    } 
    } 

Я Использование хранимых процедур в моем Джанго приложение, чтобы использовать существующие функциональные возможности

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]) 

Я получаю следующие ошибки при выполнении формы

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

Django версии 1.10 для Windows 7 64 бит Django-Pyodbc-лазурь: Версия: 1.10.4.0 Python 3.5

+0

Почему вы написали хранимые процедуры для простых вставок, подобных этому, в первую очередь? Все, что вы достигаете, это сделать вещи довольно сложными. Обычно вы не используете курсоры в django, потому что у нас фантастический ORM. Эта вставка на основе курсора - это один лайнер с использованием Django ORM – e4c5

+0

@ e4c5. Я использую все существующие хранимые процедуры, я не хотел реорганизовывать свои модели в соответствии с новым приложением, и существующее веб-приложение находится в производстве с улучшениями, идущими я тоже смог бы их покрыть, используя SPs –

+0

. Какова точка написания хранимой процедуры для простой вставки? Код для вызова хранимой процедуры более сложный, чем один вкладыш для вставки с помощью 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. Удачи!

Смежные вопросы