我正在开发一个Web应用程序以及SQL Server 2014上的现有Windows应用程序。使用以下设置
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行,执行 return super(CursorDebugWrapper,self).execute(sql,params) 执行文件“c:\ python35 \ lib \ site-packages \ django \ db \ backends \ utils.py”,第64行 return self.cursor.execute(sql,params) 执行文件“c:\ python35 \ lib \ site-packages \ sql_server \ pyodbc \ base.py”,第535行 sql = self.format_sql(sql,params) 在format_sql中的文件“c:\ python35 \ lib \ site-packages \ sql_server \ pyodbc \ base.py”,第503行 sql = sql%tuple('?'* len(params)) TypeError:不是在字符串格式化期间转换的所有参数
Django ver 1.10 Windows 7 64位 Django-Pyodbc-azure:版本:1.10.4.0 Python 3.5
答案 0 :(得分: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。祝你好运!