首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试使用psycopg2向Postgresql数据库添加数据

尝试使用psycopg2向Postgresql数据库添加数据
EN

Stack Overflow用户
提问于 2021-12-07 20:28:28
回答 1查看 127关注 0票数 0

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

这是我的models.py

代码语言:javascript
运行
复制
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)])

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

代码语言:javascript
运行
复制
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连接

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-12-07 21:02:44

您应该使用Django的ORM代替:

代码语言:javascript
运行
复制
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,
    )

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

代码语言:javascript
运行
复制
listing = Listing.objects.create(...)
category = Category.objects.first()
listing.categories.add(category)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70266554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档