列值上的 psycopg2 未定义列

psycopg2 undefined column on column value

psycopg2 现在对我来说 child。

cur = conn.cursor()
        url = "https://shofi-mod.s3.us-east-2.amazonaws.com/" + str(rawbucketkey)
        query = f"""UPDATE contentcreatorcontentfeedposts_contentfeedpost
                    SET picturemediatype = TRUE, mediakey ={rawbucketkey},
                    mediaurl= "{url}", active = TRUE, postsubmit = FALSE
                    WHERE contentcreator_id ={userid} AND
                    id ={contentpostid};
                    COMMIT;"""


        cur.execute(query)
        cur.close()

但我一直收到错误消息:

[ERROR] UndefinedColumn: column "https://shofi-mod.s3.us-east-2.amazonaws.com/061909729140543151" does not exist
LINE 3:                     mediaurl= "https://shofi-mod.s3.us-east-...
                                      ^

Traceback (most recent call last):
  File "/var/task/lambdarunner.py", line 163, in lambda_handler
    cur.execute(query)

我的数据库实际上有一个媒体栏

class ContentFeedPost(models.Model):
   contentcreator = models.ForeignKey(ContentCreatorUsers, on_delete=models.CASCADE)
   creationtimestamp = models.DateTimeField(auto_now_add=True)
   likes = models.BigIntegerField(default= 0)
   favoritedtimes = models.BigIntegerField(default=0)
   tipcount = models.IntegerField(default=0)
   mediakey = models.CharField(max_length=200, null=True, blank=True)
   mediaurl = models.CharField(max_length=200, null=True, blank=True)
   audiomediatype = models.BooleanField(default=False)
   videomediatype = models.BooleanField(default=False)
   audiotitle = models.CharField(max_length=100, null=True, blank=True)
   videoplaceholderimage = models.CharField(max_length=200, blank=True, null=True)
   videoplaceholderimagekey = models.CharField(max_length=200, blank=True, null=True)
   audioplaceholderimage = models.CharField(max_length=200, blank=True, null=True)
   audioplaceholderimagekey = models.CharField(max_length=200, blank=True, null=True)
   picturemediatype = models.BooleanField(default=False)
   postsubmit = models.BooleanField(default=True)
   posttext = models.CharField(max_length=1000, blank=True, null=True)
   active = models.BooleanField(default=False)

以上是 django ORM 定义

奇怪的是,它看起来像是在抱怨我试图将列 mediaurl 设置为的值。这是没有意义的。我做错了什么很明显吗?

Postgres 中的字符串值由单引号分隔,而不是双引号。双引号用于分隔复杂的列名称。

顺便说一句,你应该让 psycopg2 做你的替代。那会立即解决问题:

cur = conn.cursor()
url = "https://shofi-mod.s3.us-east-2.amazonaws.com/" + str(rawbucketkey)
query = """UPDATE contentcreatorcontentfeedposts_contentfeedpost
                    SET picturemediatype = TRUE, mediakey = %s,
                    mediaurl= %s, active = TRUE, postsubmit = FALSE
                    WHERE contentcreator_id = %s AND
                    id = %s;
                    COMMIT;"""


cur.execute(query, (rawbucketkey, url, userid, contentpostid) )
cur.close()