SAP HANA Backend Django Framework

Django, Flask, Bottle, WSGI, CGI…
Antworten
Benutzeravatar
Lessly
User
Beiträge: 12
Registriert: Montag 30. April 2018, 17:25

Hallo zusammen,

ich möchte gerne SAP HANA als Datenbankbackend in Django einbinden.

Zum Testen habe ich mir eine VM mit der Hana Express erstellt und kann die HANA auch über connection = pyhdb.connect erreichen.

Ich möchte Hana allerdings als Ersatz für sqlite verwenden.

Ich habe das Backend von Mathebox verwendet, komme allerdings nicht weiter.

https://github.com/mathebox/django_hana_pyhdb

Es erscheint immer die Meldung, dass Hana als Backend nicht erlaubt ist.

Kennst jemand das Problem und kann mir helfen?

Vielen Dank für eure Hilfe.

Viele Grüße

Lessly
Viele Grüße

Lessly
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

bist du sicher, dass Hana als 1. DB für Django erlaubt ist? Django speichert ja eine ganze Reihe "Verwaltungssachen" für sich selber in der DB, dass müsste das Hana bzw. das Django-Hana Modul ja auch unterstützen...

Hast du mal probiert, was passiert, wenn du Hana "nur" als 2. DB einrichtest, wo dann "nur" deine Models drauf zugreifen? Und die Verwaltungsdaten liegen weiter in SQLite oder PostgreSQL?

Gruß, noisefloor
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Nachtrag:
* Wann kommt die Fehlermeldung, also nach welchem Befehl?
* Poste mal bitte die komplette Fehlermeldung.

Gruß, noisefloor
Benutzeravatar
Lessly
User
Beiträge: 12
Registriert: Montag 30. April 2018, 17:25

Hallo noisefloor,

vielen Dank für deine Hilfe.

Ich arbeite noch nicht sehr lange mit Django. Mit SQLite hat bisher alles immer gut funktioniert.

Ich habe bezüglich Hana nichts Gegenteiliges gefunden.

Wie kann ich den in Django eine zweite Datenbank einführen?

Die folgende Meldung kommt direkt nach dem Ausführen der manage.py also ohne das makemigrations ausgeführt habe.

Vielen Dank für deine Hilfe.

Hier die Fehlermeldung

C:\ProgramData\Anaconda\envs\DjangoApp\python.exe K:/PyCharmProjekte/PyCharm-Code/Django/TestHanaDjango/manage.py
Traceback (most recent call last):
File "C:\ProgramData\Anaconda\envs\DjangoApp\lib\site-packages\django\db\utils.py", line 110, in load_backend
return import_module('%s.base' % backend_name)
File "C:\ProgramData\Anaconda\envs\DjangoApp\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 941, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'django_hana'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "K:/PyCharmProjekte/PyCharm-Code/Django/TestHanaDjango/manage.py", line 15, in <module>
execute_from_command_line(sys.argv)
File "C:\ProgramData\Anaconda\envs\DjangoApp\lib\site-packages\django\core\management\__init__.py", line 371, in execute_from_command_line
utility.execute()
File "C:\ProgramData\Anaconda\envs\DjangoApp\lib\site-packages\django\core\management\__init__.py", line 347, in execute
django.setup()
File "C:\ProgramData\Anaconda\envs\DjangoApp\lib\site-packages\django\__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "C:\ProgramData\Anaconda\envs\DjangoApp\lib\site-packages\django\apps\registry.py", line 112, in populate
app_config.import_models()
File "C:\ProgramData\Anaconda\envs\DjangoApp\lib\site-packages\django\apps\config.py", line 198, in import_models
self.models_module = import_module(models_module_name)
File "C:\ProgramData\Anaconda\envs\DjangoApp\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "C:\ProgramData\Anaconda\envs\DjangoApp\lib\site-packages\django\contrib\auth\models.py", line 2, in <module>
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
File "C:\ProgramData\Anaconda\envs\DjangoApp\lib\site-packages\django\contrib\auth\base_user.py", line 47, in <module>
class AbstractBaseUser(models.Model):
File "C:\ProgramData\Anaconda\envs\DjangoApp\lib\site-packages\django\db\models\base.py", line 114, in __new__
new_class.add_to_class('_meta', Options(meta, app_label))
File "C:\ProgramData\Anaconda\envs\DjangoApp\lib\site-packages\django\db\models\base.py", line 315, in add_to_class
value.contribute_to_class(cls, name)
File "C:\ProgramData\Anaconda\envs\DjangoApp\lib\site-packages\django\db\models\options.py", line 205, in contribute_to_class
self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
File "C:\ProgramData\Anaconda\envs\DjangoApp\lib\site-packages\django\db\__init__.py", line 33, in __getattr__
return getattr(connections[DEFAULT_DB_ALIAS], item)
File "C:\ProgramData\Anaconda\envs\DjangoApp\lib\site-packages\django\db\utils.py", line 202, in __getitem__
backend = load_backend(db['ENGINE'])
File "C:\ProgramData\Anaconda\envs\DjangoApp\lib\site-packages\django\db\utils.py", line 125, in load_backend
) from e_user
django.core.exceptions.ImproperlyConfigured: 'django_hana' isn't an available database backend.
Try using 'django.db.backends.XXX', where XXX is one of:
'mysql', 'oracle', 'postgresql', 'sqlite3'

Process finished with exit code 1

Viele Grüße
Lessly
Viele Grüße

Lessly
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Hast du daran gedacht, in der settings.py als Engine "django_hana" einzutragen? Nutzt du die Dekoratoren @column_store bzw @row_store für deine Models?
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wie man mehr als eine DB in Django nutzt ist in der Doku erklärt: https://docs.djangoproject.com/en/1.11/ ... /multi-db/

Wobei du erst Mal das von snafu gesagte umsetzen solltest und HanaDB in Django einbinden. Wenn dann immer noch Fehler auftreten -> die Fehlermeldung bitte hier noch mal posten.

Gruß, noisefloor
DerKaktus
User
Beiträge: 3
Registriert: Mittwoch 2. Mai 2018, 14:08

Hallo, ich habe das selbe Problem. Habe ebenfalls den bereits oben genannten Link verwendet, django_hana auch als engine angegeben und erhalte weiterhin folgende Fehlermeldung:
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x00000000052A6620>
Traceback (most recent call last):
File "C:\Users\Kaktus\Anaconda3\envs\DjangoApp\lib\site-packages\django\db\utils.py", line 110, in load_backend
return import_module('%s.base' % backend_name)
File "C:\Users\Kaktus\Anaconda3\envs\DjangoApp\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 941, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'django_hana'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "C:\Users\Kaktus\Anaconda3\envs\DjangoApp\lib\site-packages\django\utils\autoreload.py", line 225, in wrapper
fn(*args, **kwargs)
File "C:\Users\Kaktus\Anaconda3\envs\DjangoApp\lib\site-packages\django\core\management\commands\runserver.py", line 120, in inner_run
self.check(display_num_errors=True)
File "C:\Users\Kaktus\Anaconda3\envs\DjangoApp\lib\site-packages\django\core\management\base.py", line 364, in check
include_deployment_checks=include_deployment_checks,
File "C:\Users\Kaktus\Anaconda3\envs\DjangoApp\lib\site-packages\django\core\management\base.py", line 351, in _run_checks
return checks.run_checks(**kwargs)
File "C:\Users\Kaktus\Anaconda3\envs\DjangoApp\lib\site-packages\django\core\checks\registry.py", line 73, in run_checks
new_errors = check(app_configs=app_configs)
File "C:\Users\Kaktus\Anaconda3\envs\DjangoApp\lib\site-packages\django\core\checks\model_checks.py", line 27, in check_all_models
errors.extend(model.check(**kwargs))
File "C:\Users\Kaktus\Anaconda3\envs\DjangoApp\lib\site-packages\django\db\models\base.py", line 1202, in check
errors.extend(cls._check_long_column_names())
File "C:\Users\Kaktus\Anaconda3\envs\DjangoApp\lib\site-packages\django\db\models\base.py", line 1615, in _check_long_column_names
connection = connections[db]
File "C:\Users\Kaktus\Anaconda3\envs\DjangoApp\lib\site-packages\django\db\utils.py", line 202, in __getitem__
backend = load_backend(db['ENGINE'])
File "C:\Users\Kaktus\Anaconda3\envs\DjangoApp\lib\site-packages\django\db\utils.py", line 125, in load_backend
) from e_user
django.core.exceptions.ImproperlyConfigured: 'django_hana' isn't an available database backend.
Try using 'django.db.backends.XXX', where XXX is one of:
'mysql', 'oracle', 'postgresql', 'sqlite3'

Werde weiterhin versuchen, das Thema zum laufen zu bringen, wäre für jeden Tipp wirklich dankbar!!!
Lg derKaktus
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Wenn du dir den Traceback anschaust ist das Problem eigentlich offensichtlich. Du hast django_hana nicht installiert (ImportError) und deswegen beschwert sich Django dass die Konfiguration nicht richtig ist (ImproperlyConfigured).

Sicher dass du django_hana korrekt in das anaconda DjangoApp environment installiert hast?
Benutzeravatar
Lessly
User
Beiträge: 12
Registriert: Montag 30. April 2018, 17:25

Hallo zusammen,

ja hab ich.

Code: Alles auswählen

 In settings.py 

DATABASES = {
    'default': {
        'ENGINE': 'django_hana',
        'NAME': 'djhxe',
        'USER': 'SYSTEM',
        'PASSWORD': 'WI1RoBu2',
        'HOST': '192.168.178.22',
        'PORT': '39013'
    }
}
snafu hat geschrieben:Hast du daran gedacht, in der settings.py als Engine "django_hana" einzutragen? Nutzt du die Dekoratoren @column_store bzw @row_store für deine Models?
Viele Grüße

Lessly
Benutzeravatar
Lessly
User
Beiträge: 12
Registriert: Montag 30. April 2018, 17:25

Hallo zusammen,

@ snafu: ich hab es anhand der Github Anleitung gemacht und das Beispiel lediglich mal reinkopiert um alles zu testen:
https://github.com/mathebox/django_hana_pyhdb
snafu hat geschrieben:Hast du daran gedacht, in der settings.py als Engine "django_hana" einzutragen? Nutzt du die Dekoratoren @column_store bzw @row_store für deine Models?
Viele Dank für eure HIlfe.

Viele Grüße

Lessly
Viele Grüße

Lessly
DerKaktus
User
Beiträge: 3
Registriert: Mittwoch 2. Mai 2018, 14:08

Habe jetzt das Problem, dass der GeoManager in Django 2.0 fehlt. Gibt es hierfür eine Art WorkAround?

AttributeError: module 'django.contrib.gis.db.models' has no attribute 'GeoManager'

Vielen Dank für die Hilfe!

Lg DerKaktus
Benutzeravatar
Lessly
User
Beiträge: 12
Registriert: Montag 30. April 2018, 17:25

Hallo zusammen,

bei mir läuft es jetzt. habe mit den Versionen von Django rumgespielt. Mit Django 1.10 klappt alles ohne Probleme.

Viele Grüße und vielen Dank für eure HIlfe
Lessly
Viele Grüße

Lessly
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

Django 1.10 ist seit Ende 2017 EOL und wird nicht mehr unterstützt... Das willst du produktiv eigentlich nicht mehr benutzen. 1.11 LTS wäre besser, das hat noch Support bis April 2020.

Gruß, noisefloor
Benutzeravatar
Lessly
User
Beiträge: 12
Registriert: Montag 30. April 2018, 17:25

Hallo zusammen,

nachdem ich nun etwas mehr Zeit habe, hab ich mich dazu entschlossen, doch auf die neuste Django Version zu wechseln.

Hat hier jemand vielleicht eine Lösung zum oben genannten Fehler. Es ist genau die selbe Fehlermeldung.

Danke für eure HIlfe.

Viele Grüße
Lessly
Viele Grüße

Lessly
Antworten