Как вставить в поле ForeignKey, используя сырой SQL? - PullRequest
3 голосов
/ 16 октября 2010

У меня есть таблицы, подобные следующей (определение модели Django с базой данных postgres):

class Person(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=300)     
class Owner(models.Model):
    id = models.IntegerField()
    person = models.ForeignKey(Person) 

Я использую скрипт Python для настройки своей базы данных из файлов CSV. Необработанные файлы содержат список владельцев с целочисленным идентификатором и целочисленным полем person, которое отображается на целое число в Person.id.

Однако, учитывая, что столбец person в Owner ожидает объект Person, как мне написать необработанную строку SQL для вставки значения в Owner?

owner_id = 665
person_id = 330
sql_string = 'INSERT INTO owner (id, person) VALUES (' +
sql_string += owner_id + ', ' + ???? + ');'

1 Ответ

1 голос
/ 17 октября 2010

Вы не говорите, почему вам нужно делать это в сыром SQL. И я также не понимаю, почему вы используете structidx и person в SQL, когда ваше поле PK называется id - и имя базового столбца для person равно person_id. Итак, ваш код должен быть:

sql_string = "INSERT INTO owner (`id`, `person_id`) VALUES (%s, %s)"
cursor = connection.cursor()
cursor.execute(sql_string, (665, 330))

Обратите внимание, что всегда рекомендуется использовать функцию цитирования Python db-api, как я здесь, во избежание атак с использованием SQL-инъекций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...