首页 文章

Django Forms pyodbc Mssql TypeError:并非在字符串格式化过程中转换所有参数

提问于
浏览
1

我正在SQL Server 2014上与现有的Windows应用程序一起开发Web应用程序 . 使用以下设置

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

我在我的django应用程序中使用存储过程来使用现有功能

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

我在执行表单时遇到以下错误

文件“c:\ python35 \ lib \ site-packages \ django \ db \ backends \ utils.py”,第79行,在execute return super(CursorDebugWrapper,self).execute(sql,params)文件“c:\ python35 \ lib \ site-packages \ django \ db \ backends \ utils.py“,第64行,在执行返回self.cursor.execute(sql,params)文件”c:\ python35 \ lib \ site-packages \ sql_server \ pyodbc \ base.py“,第535行,执行sql = self.format_sql(sql,params)文件”c:\ python35 \ lib \ site-packages \ sql_server \ pyodbc \ base.py“,第503行,格式为_sql = sql = sql%tuple('?'* len(params))TypeError:并非在字符串格式化过程中转换所有参数

Django ver 1.10 Windows 7 64位Django-Pyodbc-azure:版本:1.10.4.0 Python 3.5

1 回答

  • 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 . 祝好运!

相关问题