繁体   English   中英

尝试使用 psycopg2 将数据添加到 Postgresql 数据库

[英]Trying to add data to Postgresql database using psycopg2

我能够创建脚本以将数据直接添加到 Postgresql 表中。 唯一的问题是ManyToManyFields。 虽然我能够添加数据,但我无法链接到多对多。

这是我的models.py

class Category(MPTTModel):
    name = models.CharField(max_length=150, unique=True)
    parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')

    class MPTTMeta:
        order_insertion_by = ['name']

    def __str__(self):
        return self.name

from django.urls import reverse

class Listing(models.Model):
    name = models.CharField('Business Name', max_length=250)
    address = models.CharField('Address', max_length=300)
    phone_number = models.CharField('Phone Number', max_length=20)
    web = models.URLField('Website')
    category = models.ManyToManyField(Category)
    main_image = models.CharField('Image Link', max_length=500)

    LISTING_STATUS = (
        ('a', 'Active'),
        ('e', 'Expired'),
        ('i', 'Inactive'),
        ('c', 'Claimed'),
    )

    status = models.CharField(
        max_length=1,
        choices=LISTING_STATUS,
        blank=True,
        default='a',
        help_text='Listing Status',
    )
    def get_cats(self):
        return ", ".join([str(p) for p in self.category.all()])
    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('listing-detail', args=[str(self.id)])

在另一个文件中,我创建了另一个代码来将信息添加到数据库中:

def insert(name, address, phone_number, web, status, main_image, ):
    conn = psycopg2.connect("host=localhost dbname=augustalife user=postgres")
    cur = conn.cursor()
    cur.execute("INSERT INTO listings_listing (name, address, phone_number, web, status, main_image) VALUES (%s,%s,%s,%s,%s,%s);", (name, address, phone_number, web, status, main_image))
    conn.commit()
    conn.close()

我知道如果我使用Django shell ,我可以手动链接项目。 但是,有没有办法添加listing并将其与正确的category联系起来?

提前致谢。

您应该改用 Django 的 ORM :

def insert(name, address, phone_number, web, status, main_image):
    Listing.objects.create(
        name=name,
        address=address,
        phone_number=phone_number,
        website=web,
        status=status,
        main_image=main_image,
    )

我不确定您如何确定哪些类别属于给定列表,但链接类别和列表的过程很简单:

listing = Listing.objects.create(...)
category = Category.objects.first()
listing.categories.add(category)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM