Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Forms pyodbc Mssql TypeError:在字符串格式化过程中并非所有参数都已转换_Django_Pyodbc - Fatal编程技术网

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

Django Forms pyodbc Mssql TypeError:在字符串格式化过程中并非所有参数都已转换,django,pyodbc,Django,Pyodbc,我正在SQL server 2014上与现有windows应用一起开发一个web应用。使用以下设置 DATABASES = { 'default': { 'NAME': ' Name', 'ENGINE': 'sql_server.pyodbc', 'SERVER': 'server', 'USER': 'sa', 'PASSWORD': 'password', 'OPTIONS': { 'driver_supports_ut

我正在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行 返回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\u server\pyodbc\base.py”,第535行,执行 sql=self.format\u sql(sql,参数) 文件“c:\python35\lib\site packages\sql\u server\pyodbc\base.py”,第503行,格式为\u sql sql=sql%元组('?'*len(参数)) TypeError:在字符串格式化过程中并非所有参数都已转换

Django 1.10版 Windows 7 64位 Django Pyodbc azure:版本:1.10.4.0
Python3.5

您的参数似乎有问题。必须按照与问号占位符相同的顺序传递参数列表中的参数:

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。祝你好运

您的论点似乎有问题。必须按照与问号占位符相同的顺序传递参数列表中的参数:

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。祝你好运

首先,为什么要为这样的简单插入编写存储过程?你所做的只是把事情弄得相当复杂。在django中通常不使用游标,因为我们有一个很棒的ORM。基于光标的插入是一个使用Django的单行程序ORM@e4c5我正在使用所有现有的存储过程,我不想根据新的应用程序重新组织我的模型,现有的web应用程序正在生产中,正在进行增强,我也可以通过使用SPSS来涵盖它们,为简单的插入编写存储过程有什么意义?调用存储过程的代码比ORM插入的一行代码复杂。很抱歉,您弄错了。@e4c5 Insert SP影响大约5个表,其中SP内有许多检查,与重写代码相比,我发现只运行已经投入生产的SP更容易。在这种情况下,这意味着您没有提出一个正确的问题。为什么您首先要为这样的简单插入编写存储过程?你所做的只是把事情弄得相当复杂。在django中通常不使用游标,因为我们有一个很棒的ORM。基于光标的插入是一个使用Django的单行程序ORM@e4c5我正在使用所有现有的存储过程,我不想根据新的应用程序重新组织我的模型,现有的web应用程序正在生产中,正在进行增强,我也可以通过使用SPSS来涵盖它们,为简单的插入编写存储过程有什么意义?调用存储过程的代码比ORM插入的一行代码复杂。很抱歉,您弄错了。@e4c5 Insert SP会影响大约5个表,并在SP中执行许多检查,而不是重写代码。我发现只运行已经在生产中的SP更容易。在这种情况下,这意味着您没有开始问正确的问题。