Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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 models Django执行存储过程-不同的数据类型、多个参数和模型中的不同列_Django Models_Django Pyodbc_Django Mssql - Fatal编程技术网

Django models Django执行存储过程-不同的数据类型、多个参数和模型中的不同列

Django models Django执行存储过程-不同的数据类型、多个参数和模型中的不同列,django-models,django-pyodbc,django-mssql,Django Models,Django Pyodbc,Django Mssql,下面列出了哪些有效,哪些无效,以及错误。尝试发送十进制/货币数据类型变量时。我不确定问题是否与不同的数据类型有关,或者传入的参数是否超过3个。前两个参数看起来像数字,但它们是作为字符串发送的。 数据库是SQL Server 2017 我注意到参数的数据类型是基于模型设置的-这会改变什么吗? param1-'10',param2为'-100',param3:Decimal('100') 编辑:返回一个整数,以及来自不同表的不同名称的列(不一定映射到映射的表/模型)。 错误详细信息: cursor

下面列出了哪些有效,哪些无效,以及错误。尝试发送十进制/货币数据类型变量时。我不确定问题是否与不同的数据类型有关,或者传入的参数是否超过3个。前两个参数看起来像数字,但它们是作为字符串发送的。 数据库是SQL Server 2017

我注意到参数的数据类型是基于模型设置的-这会改变什么吗? param1-'10',param2为'-100',param3:Decimal('100')

编辑:返回一个整数,以及来自不同表的不同名称的列(不一定映射到映射的表/模型)。

错误详细信息:

 cursor.execute('EXEC [dbo].[stored_proc] @Param1={} @Param2={} @NewParam3={}'.format(strparam1, strparam2,strparam3))        
环境: 本地变量:

ignored_wrapper_args    
(False,
 {'connection': <sql_server.pyodbc.base.DatabaseWrapper object at 0x05E96490>,
  'cursor': <django.db.backends.utils.CursorDebugWrapper object at 0x060D51B0>})
params: None
self    : <django.db.backends.utils.CursorDebugWrapper object at 0x060D51B0>
sql: ('EXEC [dbo].[stored_proc] @Param1=10 '
 '@Param2=-100 @NewParam3=100000')

Request Method: POST
Request URL: http://localhost:8000/app-url/

Django Version: 2.1.1
Python Version: 3.7.0
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'app_name']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']

我有时间对此进行测试,我相信您在
django-pyodbc-azure
中发现了一个bug。我找到了一份工作,但不是最漂亮的

如果使用相同的凭据使用
pyodbc
打开单独的连接,则可以执行以下操作:

import pyodbc

con = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=yourserver.com;PORT=1433;DATABASE=yourdb;UID=yourdb_user;PWD=password;')
cursor = con.cursor()

cursor.execute('EXEC usp_get_user_data @user_name = ?, @user_type = ?', 'flipperpa', 'admin')
rows = cursor.fetchall()
for row in rows:
    print(row)

祝你好运

您使用的软件包和版本是什么?django pyodbc有几个分支。你在什么操作系统上运行Django?我试着安装“Django pyodbc”,它返回-要求已经满足-
pyodbc=3.0.6,来自python37-32软件包-(来自Django pyodbc)(4.0.23)
。我记得我做过其他安装,并检查了django pyodbc azure,它完成了此操作-找到了现有安装:
(来自django pyodbc azure)(4.0.23)django 2.0.2卸载django-2.0.2:在我的系统变量中成功卸载django-2.0.2
,这就是我所拥有的-
C:\Users\\AppData\Local\Programs\Python37-32\Lib\site packages\django\u pyodbc-2.0.0a1.dist info
C:\Users\\AppData\Local\Programs\Python37-32\Lib\site packages\django\u pyodbc\u azure-2.1.0.0.dist info,
C:\Users\\AppData\Local\Programs\Python37-32\Lib\site packages\django\u pyodbc
C:\Users\\AppData\Local\Programs\Python37-32\Lib\site packages\sqlserver\u ado
这是在windows 10 pro上运行的64位操作系统,以更详细的信息更新了这个问题。我仍然觉得这是一个简单的字符串格式问题!非常感谢。我来试试解决办法。是否有一种简单的方法可以将行[0]、行[1]等获取到不同的模型(结果集中有不同于实际模型的类似列的名称,并且结果列不映射到任何特定的表)self.model为我出错。这是模型中的一个函数
resultSet=[]对于结果中的行:p=self.models(id=row[0],column2=row[1],summary=row[2])resultSet.append(p)return resultSet
当使用
pyodbc
而不是Django的连接时,您可以访问返回值,例如
row.user\u name
row.user\u type
,我给出的示例使用SQL Server上的存储过程运行,但我无法真正调试您的存储过程。是您的行,
cursor.execute('EXEC[dbo].[stored_proc]@Param1=?@Param2=?@NewParam3=?',strparam1,strparam2,strparam3)
?另外,如果T-SQL中的
@Param2
INT
,那么Python中的
strparam
必须是
INT
。。。不是字符串。任何结果都可以包含在视图的上下文中。例如,您可以在Django模板中执行
context['rows']=cursor.fetchall()
,然后执行
{%For row in rows%}
ignored_wrapper_args    
(False,
 {'connection': <sql_server.pyodbc.base.DatabaseWrapper object at 0x05E96490>,
  'cursor': <django.db.backends.utils.CursorDebugWrapper object at 0x060D51B0>})
params: None
self    : <django.db.backends.utils.CursorDebugWrapper object at 0x060D51B0>
sql: ('EXEC [dbo].[stored_proc] @Param1=10 '
 '@Param2=-100 @NewParam3=100000')

Request Method: POST
Request URL: http://localhost:8000/app-url/

Django Version: 2.1.1
Python Version: 3.7.0
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'app_name']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']
File "C:\Users\user_name\.virtualenvs\prioject_name\lib\site-packages\django\db\backends\utils.py" in _execute
  83.                 return self.cursor.execute(sql)

File "C:\Users\user_name\.virtualenvs\prioject_name\lib\site-packages\sql_server\pyodbc\base.py" in execute
  546.             return self.cursor.execute(sql, params)

The above exception (('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Incorrect syntax near '@Param2'. (102) (SQLExecDirectW)")) was the direct cause of the following exception:

File "C:\Users\user_name\.virtualenvs\prioject_name\lib\site-packages\django\core\handlers\exception.py" in inner
  34.             response = get_response(request)

File "C:\Users\user_name\.virtualenvs\prioject_name\lib\site-packages\django\core\handlers\base.py" in _get_response
  126.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\user_name\.virtualenvs\prioject_name\lib\site-packages\django\core\handlers\base.py" in _get_response
  124.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\user_name\.virtualenvs\prioject_name\lib\site-packages\django\views\generic\base.py" in view
  68.             return self.dispatch(request, *args, **kwargs)

File "C:\Users\user_name\.virtualenvs\prioject_name\lib\site-packages\django\views\generic\base.py" in dispatch
  88.         return handler(request, *args, **kwargs)

File "C:\Github\project-name\app_name\views.py" in post
  90.             results = ModelName.get_stored_proc_data(str(param1), str(param2), decimalParam3)

File "C:\Github\project-name\app_name\models.py" in get_stored_proc_data
  89.             cursor.execute('EXEC [dbo].[stored_proc] @Param1={} @Param2={} @NewParam3={}'.format(param1, param2,decimalParam3))        

File "C:\Users\user_name\.virtualenvs\prioject_name\lib\site-packages\django\db\backends\utils.py" in execute
  100.             return super().execute(sql, params)

File "C:\Users\user_name\.virtualenvs\prioject_name\lib\site-packages\django\db\backends\utils.py" in execute
  68.         return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)

File "C:\Users\user_name\.virtualenvs\prioject_name\lib\site-packages\django\db\backends\utils.py" in _execute_with_wrappers
  77.         return executor(sql, params, many, context)

File "C:\Users\user_name\.virtualenvs\prioject_name\lib\site-packages\django\db\backends\utils.py" in _execute
  85.                 return self.cursor.execute(sql, params)

File "C:\Users\user_name\.virtualenvs\prioject_name\lib\site-packages\django\db\utils.py" in __exit__
  89.                 raise dj_exc_value.with_traceback(traceback) from exc_value

File "C:\Users\user_name\.virtualenvs\prioject_name\lib\site-packages\django\db\backends\utils.py" in _execute
  83.                 return self.cursor.execute(sql)

File "C:\Users\user_name\.virtualenvs\prioject_name\lib\site-packages\sql_server\pyodbc\base.py" in execute
  546.             return self.cursor.execute(sql, params)

Exception Type: ProgrammingError at /app-url/class/
Exception Value: ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Incorrect syntax near '@Param2'. (102) (SQLExecDirectW)")
import pyodbc

con = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=yourserver.com;PORT=1433;DATABASE=yourdb;UID=yourdb_user;PWD=password;')
cursor = con.cursor()

cursor.execute('EXEC usp_get_user_data @user_name = ?, @user_type = ?', 'flipperpa', 'admin')
rows = cursor.fetchall()
for row in rows:
    print(row)