Im trying to query the second DB for information. Its a back up from another database, its separate from default, here is the settings.py -> DATABASES:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '#', 'USER': '#', 'PASSWORD': '#', 'HOST': '', 'PORT': '', }, 'userxml': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '#', 'USER': '#', 'PASSWORD': '#', 'HOST': '', 'PORT': '', }, 'DataDump': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '#', 'USER': '#', 'PASSWORD': #', 'HOST': '', 'PORT': '', } } So the two tables are in DataDump DB. So what im trying to do is DataDump --> table1(field) compare with table2(field). I hope this makes it more clear, the DB is already populated with values, i just need to compare couple of tables. Im not going to write anything to the table, just going to use it for reads. >From your example i came up with this (the SmallInteger is ok because the values go up only a couple of thousand): class itemSearch(models.Model): invgroupstable = models.ForeignKey('invGroups', db_column = 'categoryID') invtypestable = models.ForeignKey('invTypes', db_column = 'typeName') class invGroups(models.Model): groupID = models.SmallIntegerField(primary_key = True) categoryID = models.SmallIntegerField() class Meta: db_table = 'invGroups' class invTypes(models.Model): typeID = models.SmallIntegerField(primary_key = True) typeName = models.CharField(max_length = 200) published = models.SmallIntegerField() groupID = models.SmallIntegerField() class Meta: db_table = 'invTypes' And the query is like this: item_search_results = itemSearch.objects.using( 'DataDump' ).filter( invgroupstable__categoryid__in[7, 8, 9, 18, 20], invtypestable__typename_ilike = search_query )[0:15] And i get this error, global name 'invgroupstable__categoryid__in' is not defined I think im really miss understanding something here. On Thu, Dec 22, 2011 at 2:57 PM, Tom Evans <tevans...@googlemail.com> wrote: > On Thu, Dec 22, 2011 at 12:27 PM, kr0na <enarbu...@gmail.com> wrote: >> Im trying to compare two tables in a second database that is a >> migrated database from mssql. The second database doesn't have any >> apps for it, it will only be used for queries. >> >> This are my models for the two tables. >> from django.db import models >> >> class invGroups(models.Model): >> groupID = models.SmallIntegerField(primary_key = True) >> categoryID = models.SmallIntegerField() >> >> def __unicode__(self): >> return self.item >> >> class Meta: >> db_table = 'invGroups' >> >> class invTypes(models.Model): >> typeID = models.SmallIntegerField(primary_key = True) >> typeName = models.CharField(max_length = 200) >> published = models.SmallIntegerField() >> groupID = models.SmallIntegerField() >> >> def __unicode__(self): >> return self.item >> >> class Meta: >> db_table = 'invTypes' >> >> And the query so far. >> item_search_results = invTypes.objects.using( >> 'DataDump' >> ).filter( >> typeName__icontains = search_query >> )[0:15] >> >> I currently can select from only one database, and the query is what i >> have so far. I tried to use ForeignKey with no results. > > I didn't really understand what you are asking here. Where does the > second database come into it? > >> Can I do this >> without using a RAW query? Im trying to achieve this query: >> SELECT >> typeName >> FROM >> invGroups, >> invTypes >> WHERE >> invTypes.groupID = invGroups.groupID and >> invGroups.categoryID in (7, 8, 9, 18, 20) and >> invTypes.typeName like 'query%' >> ORDER BY >> invTypes.typeName; >> > > First off, currently your objects are not related to each other. You > need to specify a foreign key relationship between the two related > models: > > class invTypes(models.Model): > typeID = models.SmallIntegerField(primary_key = True) > typeName = models.CharField(max_length = 200) > published = models.SmallIntegerField() > group = models.ForeignKey('invGroups', db_column='groupID') > > Then, you can simply use Django's ORM to query the tables: > > invType.objects.filter(invgroups__categoryid__in[7,8,9,8,20], > typename__ilike=query).values_list('typename', flat=True) > > Django will do an explicit join, rather than the implicit one in your query. > > There are a few other things I find strange with your code: > > Readability: your class names should be UpperCamelCase and your > variable, function and method names either lowerCamelCase or > lower_case_with_underscores. PEP 8 (and me) prefer the latter. > > Straight up bugs: Both model's unicode methods refer to self.item, but > there is no self.item. > > Specifying the type and name of your primary key. Django will auto add > a primary key with a sane type if you don't. You've chosen > SmallIntegerField - in most databases, this will have a maximum value > of 32,768, meaning you can put that many items in your DB table and no > more. > > It could be you are mapping Django onto an existing DB structure, > which would explain the strange model attribute names. When doing > this, it's easier to have a sensible python name for the attribute, > and specify the actual column name in the db_column argument, as I did > adding the ForeignKey. > > Cheers > > Tom > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To post to this group, send email to django-users@googlegroups.com. > To unsubscribe from this group, send email to > django-users+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/django-users?hl=en. > -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.