[Answered ]-Django-Python/MySQL: How can I access a field of a table in the database that is not present in a model's field?

2👍

Unless you want to write raw sql, you’re going to have to define a model. Since your model fields don’t HAVE to be named the same thing as the column they represent, you can give your fields useful names.

class LegacyTable(models.Model):
    useful_name = models.IntegerField(db_column="AP1|00:23:69:33:C1:4F")

    class Meta:
        db_table = "LegacyDbTableThatHurtsMyHead"
        managed = False # syncdb does nothing

You may as well do this regardless. As soon as you require the use of another column in your legacy database table, just add another_useful_name to your model, with the db_column set to the column you’re interested in.

This has two solid benefits. One, you no longer have to write raw sql. Two, you do not have to define all the fields up front.

The alternative is to define all your fields in raw sql anyway.

Edit:

Legacy Databases describes a method for inspecting existing databases, and generating a models.py file from existing schemas. This may help you by doing all the heavy lifting (nulls, lengths, types, fields). Then you can modify the definition to suit your needs.

python manage.py inspectdb > legacy.py

0👍

http://docs.djangoproject.com/en/dev/topics/db/sql/#executing-custom-sql-directly

Django allows you to perform raw sql queries. Without more information about your tables that’s about all that I can offer.

custom query:

def my_custom_sql():
    from django.db import connection, transaction
    cursor = connection.cursor()

    # Data modifying operation - commit required
    cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz])
    transaction.commit_unless_managed()

    # Data retrieval operation - no commit required
    cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
    row = cursor.fetchone()

    return row

acessing other databases:

from django.db import connections
cursor = connections['my_db_alias'].cursor()
# Your code here...
transaction.commit_unless_managed(using='my_db_alias')
👤dting

Leave a comment