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


N

News123

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
 
Ad

Advertisements

N

News123

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)[email protected]:~/minidjango$


So I need at least a little more to make my script work.
 
R

Roy Smith

News123 said:
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.
 
I

Ian Kelly

###############################################
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)[email protected]:~/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.
 
N

News123

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.


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)[email protected]:~/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
 
N

News123

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
 
Ad

Advertisements

N

News123

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.
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top