syncdb - ValueError: слишком много значений для распаковки

ОБНОВЛЕНИЕ для близких - я думаю, что прошел через это, и это было немного глупо с моей стороны.

python manage.py inspectdb > models.py

Я забыл передать вывод в файл!

Я закинул это в свой app/models.py, и теперь я просто пытаюсь запустить его оттуда, но иду дальше.

Я пытаюсь запустить django на сервере SQL Server 2008 R2.

Я выяснил соединения FreeTDS/unixODBC. Я могу успешно выполнить запрос isql и tsql к базе данных.

Я смог установить соединение непосредственно в python, например:

import pyodbc
cnxn = pyodbc.connect('DRIVER=FreeTDS;SERVER=servername;DATABASE=dbname;UID=user;PWD=pass;TDS_Version=8.0;')
cursor = cnxn.cursor()
result = cursor.execute("select name from tablea where name = 'hello'")
print result

Если я делаю inspectdb в оболочке django, все в порядке. Он возвращает более 70 таблиц и их расположение в порядке.

как только я пытаюсь сделать syndb, он выдает следующую ошибку:

Creating tables ...
Creating table django_admin_log
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_groups
Creating table auth_user_user_permissions
Creating table auth_user
Creating table django_content_type
Creating table django_session
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 392, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 242, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 285, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 415, in handle
    return self.handle_noargs(**options)
  File "/usr/local/lib/python2.6/dist-packages/django/core/management/commands/syncdb.py", line 112, in handle_noargs
    emit_post_sync_signal(created_models, verbosity, interactive, db)
  File "/usr/local/lib/python2.6/dist-packages/django/core/management/sql.py", line 216, in emit_post_sync_signal
    interactive=interactive, db=db)
  File "/usr/local/lib/python2.6/dist-packages/django/dispatch/dispatcher.py", line 185, in send
    response = receiver(signal=self, sender=sender, **named)
  File "/usr/local/lib/python2.6/dist-packages/django/contrib/auth/management/__init__.py", line 82, in create_permissions
    ctype = ContentType.objects.db_manager(db).get_for_model(klass)
  File "/usr/local/lib/python2.6/dist-packages/django/contrib/contenttypes/models.py", line 47, in get_for_model
    defaults = {'name': smart_text(opts.verbose_name_raw)},
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/manager.py", line 154, in get_or_create
    return self.get_queryset().get_or_create(**kwargs)
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 373, in get_or_create
    return self.get(**lookup), False
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 301, in get
    num = len(clone)
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 77, in __len__
    self._fetch_all()
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 854, in _fetch_all
    self._result_cache = list(self.iterator())
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 220, in iterator
    for row in compiler.results_iter():
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/compiler.py", line 710, in results_iter
    for rows in self.execute_sql(MULTI):
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/compiler.py", line 771, in execute_sql
    sql, params = self.as_sql()
  File "/usr/local/lib/python2.6/dist-packages/sql_server/pyodbc/compiler.py", line 48, in as_sql
    self._get_ordering(out_cols, supports_offset_clause or not do_offset)
  File "/usr/local/lib/python2.6/dist-packages/sql_server/pyodbc/compiler.py", line 154, in _get_ordering
    ordering, ordering_group_by = self.get_ordering()
ValueError: too many values to unpack

аналогично, если я попытаюсь сделать запрос в django вот так -

from myapp.models import tablea
tablea.objects.filter(id=5)

Это не удается со следующим сообщением об ошибке -

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 71, in __repr__
    data = list(self[:REPR_OUTPUT_SIZE + 1])
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 96, in __iter__
    self._fetch_all()
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 854, in _fetch_all
    self._result_cache = list(self.iterator())
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 220, in iterator
    for row in compiler.results_iter():
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/compiler.py", line 710, in results_iter
    for rows in self.execute_sql(MULTI):
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/compiler.py", line 771, in execute_sql
    sql, params = self.as_sql()
  File "/usr/local/lib/python2.6/dist-packages/sql_server/pyodbc/compiler.py", line 48, in as_sql
    self._get_ordering(out_cols, supports_offset_clause or not do_offset)
  File "/usr/local/lib/python2.6/dist-packages/sql_server/pyodbc/compiler.py", line 154, in _get_ordering
    ordering, ordering_group_by = self.get_ordering()
ValueError: too many values to unpack

Я не уверен, что эти ошибки связаны с другим найденным здесь потоком -

ValueError: Слишком много значений для распаковки Django

Но я не специалист, поэтому могу ошибаться. Я знаю, что пытался изменить свой пароль, и это не позволит мне подключить подобное сообщение об ошибке -

>>> u = User.objects.get(username="user")
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/manager.py", line 151, in get
    return self.get_queryset().get(*args, **kwargs)
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 301, in get
    num = len(clone)
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 77, in __len__
    self._fetch_all()
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 854, in _fetch_all
    self._result_cache = list(self.iterator())
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 220, in iterator
    for row in compiler.results_iter():
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/compiler.py", line 710, in results_iter
    for rows in self.execute_sql(MULTI):
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/compiler.py", line 771, in execute_sql
    sql, params = self.as_sql()
  File "/usr/local/lib/python2.6/dist-packages/sql_server/pyodbc/compiler.py", line 48, in as_sql
    self._get_ordering(out_cols, supports_offset_clause or not do_offset)
  File "/usr/local/lib/python2.6/dist-packages/sql_server/pyodbc/compiler.py", line 154, in _get_ordering
    ordering, ordering_group_by = self.get_ordering()
ValueError: too many values to unpack

отредактируйте, чтобы добавить - при выполнении запроса определение моей модели выглядит следующим образом -

from django.db import models

# Create your models here.

class tablea(models.Model):
    tablea_id = models.IntegerField()
    tablea_name = models.CharField(max_length=32)
    tablea_duration = models.IntegerField()
class Meta:
    db_table = u'tablea'
    def __unicode__(self):
        return self.tablea_name, tablea_duration

отредактируйте, чтобы добавить, что я сделал полную новую переустановку. Вытер виртуальную машину и вернул ее к жизни. Вот разбивка сделанных шагов

apt-get установить gcc g++ сделать python-dev

скачать unixODBC

tar xzvf unixODBC-2.3.2.tar.gz

./настроить

делать

makeinstall

скачать FreeTDS

tar xzvf freetds-stable.tgz

./configure --with-tdsver=8.0 --with-unixodbc=usr/local

делать

сделать установку

ldconfig -v

odbc.ini

[mssql]
Description             = MSSQL Server
Driver                  = freetds
Database                = database
Server              = server
Port            = 1433
TDS_Version             = 8.0

odbcinst.ini

[freetds]
Description     = MS SQL database access with Free TDS
Driver          = /usr/local/lib/libtdsodbc.so
Setup           = /usr/local/lib/libtdsS.so
UsageCount      = 1

freetds.conf

[mssql]
        host = server
        port = 1433
        tds version = 8.0

tsql -S mssql -U пользователь -P пароль работает

isql -v пароль пользователя mssql работает (по какой-то причине простой isql -v mssql не работает)

apt-get установить python-setuptools

пункт easy_install

pip установить pyodbc

pip установить Джанго == 1.6

pip установить django-pyodbc-azure

settings.py

DATABASES = {
   'default': {
       'ENGINE': 'sql_server.pyodbc',
       'HOST': "server\instance",
       'USER': "username",
       'PASSWORD': "password",
       'NAME': "database",
       'OPTIONS': {
           'host_is_server': True,
           'driver': 'FreeTDS',
           'dsn': 'MSSQL',
       },
   }
}

person whoisearth    schedule 11.11.2013    source источник
comment
Каково ваше определение модели в Django?   -  person janos    schedule 11.11.2013
comment
обновлено, чтобы включить models.py из приложения, которое я сделал, где я хочу, чтобы модели находились.   -  person whoisearth    schedule 11.11.2013


Ответы (1)


Это проблема несовместимости версий.

Django 1.6 изменил тип значения, возвращаемого django.db.models.sql.compiler.SQLCompiler.get_ordering. Он возвращает кортеж из трех элементов, но pyodbc распаковывает только два элемента.

Если вы посмотрите на версию Django 1.5 вы видите, что раньше он возвращал 2-элементный кортеж, как и ожидает pyodbc.

person Nadir Sampaoli    schedule 12.11.2013