using only the django ORM (DB access model) and nothing else.

Discussion in 'Python' started by News123, Jun 22, 2011.

  1. News123

    News123 Guest

    Hi,

    I have a small application running on a host without web server and
    without any need for django except its ORM accessing data bases without
    explicitely writing sql queries.)

    I assume there's many libraries (SQL Alchemy or others), which could do
    this job. and which migh have less overhead than django.

    As I am already implementing a web server application with django on
    another host I wanted to use the same syntax / API for my non web
    application.

    Now my question:

    What would be the minimal setup required to use django orms and nothing
    else.


    What entries could I remove from settings.py
    would I still have to add INSATLLED_APPS to the settings or could I just
    write one script

    defining only defining settings.DATABASES, and the typical contents of
    models.py of an application.


    Thanks in advance for some suggestions or ideas how you would approach
    writing a tiny non web application with django.db.models.Models
     
    News123, Jun 22, 2011
    #1
    1. Advertising

  2. News123

    News123 Guest

    On 06/22/2011 01:51 AM, News123 wrote:
    > Hi,
    >
    > I have a small application running on a host without web server and
    > without any need for django except its ORM accessing data bases without
    > explicitely writing sql queries.)
    >
    > I assume there's many libraries (SQL Alchemy or others), which could do
    > this job. and which migh have less overhead than django.
    >
    > As I am already implementing a web server application with django on
    > another host I wanted to use the same syntax / API for my non web
    > application.
    >
    > Now my question:
    >
    > What would be the minimal setup required to use django orms and nothing
    > else.
    >
    >
    > What entries could I remove from settings.py
    > would I still have to add INSATLLED_APPS to the settings or could I just
    > write one script
    >
    > defining only defining settings.DATABASES, and the typical contents of
    > models.py of an application.
    >
    >
    > Thanks in advance for some suggestions or ideas how you would approach
    > writing a tiny non web application with django.db.models.Models
    >

    I made a very first brute force test:

    settings.py: (only DATABASES is set)
    =======================================
    import os
    MYDIR = os.path.abspath(os.path.dirname(__file__))

    DATABASES = {
    'default' : {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': os.path.join(MYDIR, "tiny.db"),
    'HOST': '',
    'USER': '',
    'PASSWORD': '',
    'PORT': '',
    }
    }


    myapp.py
    ==========
    #!/usr/bin/env python
    import os

    # just set the env prior to importing a django module
    os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
    from django.db import models

    print "yes this line is executed"

    # this will fail :-(
    class Mini(models.Model):
    name = models.CharField(max_length=80)




    ###############################################
    If running myapp.py I get following output:

    yes this line is executed
    Traceback (most recent call last):
    File "./myapp.py", line 11, in <module>
    class Mini(models.Model):
    File
    "/opt/my_python/lib/python2.6/site-packages/Django-1.3-py2.6.egg/django/db/models/base.py",
    line 52, in __new__
    kwargs = {"app_label": model_module.__name__.split('.')[-2]}
    IndexError: list index out of range
    (my_python)n1234@mypc:~/minidjango$


    So I need at least a little more to make my script work.
     
    News123, Jun 22, 2011
    #2
    1. Advertising

  3. News123

    Roy Smith Guest

    In article <4e012e8d$0$23682$>,
    News123 <> wrote:

    > Hi,
    >
    > I have a small application running on a host without web server and
    > without any need for django except its ORM accessing data bases without
    > explicitely writing sql queries.)


    You would do much better to ask this question on the django mailing list
    (http://groups.google.com/group/django-users).


    > I assume there's many libraries (SQL Alchemy or others), which could do
    > this job. and which migh have less overhead than django.


    Ugh. I've played with SQL Alchemy a few times and every time I've run
    away screaming in the other direction. I can see how it's useful if you
    need to be totally cross-platform, but, man, if that's what it takes to
    be cross platform, I'm happy being a MySQL bigot all day long.

    > As I am already implementing a web server application with django on
    > another host I wanted to use the same syntax / API for my non web
    > application.
    >
    > Now my question:
    >
    > What would be the minimal setup required to use django orms and nothing
    > else.


    I don't see any reason you couldn't use the Model layer by itself, if
    you want to. It pretty much stands on its own.
     
    Roy Smith, Jun 22, 2011
    #3
  4. News123

    Ian Kelly Guest

    On Tue, Jun 21, 2011 at 6:42 PM, News123 <> wrote:
    > ###############################################
    > If running myapp.py I get following output:
    >
    > yes this line is executed
    > Traceback (most recent call last):
    >  File "./myapp.py", line 11, in <module>
    >    class Mini(models.Model):
    >  File
    > "/opt/my_python/lib/python2.6/site-packages/Django-1.3-py2.6.egg/django/db/models/base.py",
    > line 52, in __new__
    >    kwargs = {"app_label": model_module.__name__.split('.')[-2]}
    > IndexError: list index out of range
    > (my_python)n1234@mypc:~/minidjango$
    >
    >
    > So I need at least a little more to make my script work.


    There's a bit of magic in the way Django finds things, and I think
    you'll still need to keep the basic structure of a Django project --
    models should be in a "models.py" file located in an "app" package,
    which should be included in the INSTALLED_APPS setting. You just
    won't have any views or urlconfs or templates or admin sites or
    anything like that.
     
    Ian Kelly, Jun 22, 2011
    #4
  5. News123

    News123 Guest

    It seems I found a solution (refer to end of this tessage).

    Not sure though if there are any drawbacks or if this method of working
    could cause any other issues.


    On 06/22/2011 02:42 AM, News123 wrote:
    > On 06/22/2011 01:51 AM, News123 wrote:
    >> Hi,
    >>
    >> I have a small application running on a host without web server and
    >> without any need for django except its ORM accessing data bases without
    >> explicitely writing sql queries.)
    >>
    >> I assume there's many libraries (SQL Alchemy or others), which could do
    >> this job. and which migh have less overhead than django.
    >>
    >> As I am already implementing a web server application with django on
    >> another host I wanted to use the same syntax / API for my non web
    >> application.
    >>
    >> Now my question:
    >>
    >> What would be the minimal setup required to use django orms and nothing
    >> else.
    >>
    >>
    >> What entries could I remove from settings.py
    >> would I still have to add INSATLLED_APPS to the settings or could I just
    >> write one script
    >>
    >> defining only defining settings.DATABASES, and the typical contents of
    >> models.py of an application.
    >>
    >>
    >> Thanks in advance for some suggestions or ideas how you would approach
    >> writing a tiny non web application with django.db.models.Models
    >>

    > I made a very first brute force test:
    >
    > settings.py: (only DATABASES is set)
    > =======================================
    > import os
    > MYDIR = os.path.abspath(os.path.dirname(__file__))
    >
    > DATABASES = {
    > 'default' : {
    > 'ENGINE': 'django.db.backends.sqlite3',
    > 'NAME': os.path.join(MYDIR, "tiny.db"),
    > 'HOST': '',
    > 'USER': '',
    > 'PASSWORD': '',
    > 'PORT': '',
    > }
    > }
    >
    >
    > myapp.py
    > ==========
    > #!/usr/bin/env python
    > import os
    >
    > # just set the env prior to importing a django module
    > os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
    > from django.db import models
    >
    > print "yes this line is executed"
    >
    > # this will fail :-(
    > class Mini(models.Model):
    > name = models.CharField(max_length=80)
    >
    >
    >
    >
    > ###############################################
    > If running myapp.py I get following output:
    >
    > yes this line is executed
    > Traceback (most recent call last):
    > File "./myapp.py", line 11, in <module>
    > class Mini(models.Model):
    > File
    > "/opt/my_python/lib/python2.6/site-packages/Django-1.3-py2.6.egg/django/db/models/base.py",
    > line 52, in __new__
    > kwargs = {"app_label": model_module.__name__.split('.')[-2]}
    > IndexError: list index out of range
    > (my_python)n1234@mypc:~/minidjango$
    >
    >
    > So I need at least a little more to make my script work.
    >



    directory structure is now

    settings.py
    myapp/__init__.py
    myapp/models.py
    tst.py

    settings.py
    ------------
    import os
    MYDIR = os.path.abspath(os.path.dirname(__file__))

    DATABASES = {
    'default' : {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': os.path.join(MYDIR, "tiny.db"),
    'HOST': '',
    'USER': '',
    'PASSWORD': '',
    'PORT': '',
    }
    }

    INSTALLED_APPS = (
    'myapp',
    )


    myapp/models.py
    ----------------
    from django.db import models

    class Mini(models.Model):
    name = models.CharField(max_length=80)


    tst.py
    -------
    import os
    os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

    import myapp.models as mymodels

    for name in ["one", "two", "three"]:
    mymodels.Mini(name=name).save()

    print mymodels.Mini.objects.all().values()




    now I can call syncdb with:
    django-admin syncdb --settings=settings --pythonpath=`pwd`


    and run my test app with
     
    News123, Jun 22, 2011
    #5
  6. News123

    News123 Guest

    On 06/22/2011 03:04 AM, Ian Kelly wrote:
    >>
    >> So I need at least a little more to make my script work.

    >
    > There's a bit of magic in the way Django finds things, and I think
    > you'll still need to keep the basic structure of a Django project --
    > models should be in a "models.py" file located in an "app" package,
    > which should be included in the INSTALLED_APPS setting. You just
    > won't have any views or urlconfs or templates or admin sites or
    > anything like that.


    Hi Ian,

    Thanks for your answer.
    Ourt messages crossed. I had exactly the same idea and started playing..
    and you are right.

    The settings module needs only
    DATABASES
    and INSTALLED_APPS with one app

    and in the apps dir I need apart from the compulsory __init__.py only
    models.py

    Cool
     
    News123, Jun 22, 2011
    #6
  7. News123

    News123 Guest

    On 06/22/2011 03:02 AM, Roy Smith wrote:
    > In article <4e012e8d$0$23682$>,
    > News123 <> wrote:
    >
    >
    > I don't see any reason you couldn't use the Model layer by itself, if
    > you want to. It pretty much stands on its own.


    Thanks a lot for confirming,

    I have now my small example.

    Just wanted to be sure I don't overlook some tiny, but really annoying
    detail which would strongly advise against using the model outside of a
    web framework.
     
    News123, Jun 22, 2011
    #7
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. John Posner

    Question on Django and Django Book

    John Posner, Nov 13, 2010, in forum: Python
    Replies:
    0
    Views:
    340
    John Posner
    Nov 13, 2010
  2. News123
    Replies:
    5
    Views:
    493
  3. Devin Jeanpierre
    Replies:
    2
    Views:
    513
    Devin Jeanpierre
    Feb 14, 2012
  4. eGenix Team: M.-A. Lemburg
    Replies:
    0
    Views:
    151
    eGenix Team: M.-A. Lemburg
    Jun 18, 2013
  5. Gary Roach
    Replies:
    0
    Views:
    149
    Gary Roach
    Jan 2, 2014
Loading...

Share This Page