psycopg2 неопределенный столбец по значению столбца

#python #django #aws-lambda #sql-update #psycopg2

Вопрос:

psycopg2 сейчас для меня как ребенок-подросток.

 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. В этом нет никакого смысла. Есть ли что-то, что я делаю неправильно, что очевидно?

Ответ №1:

Строковые значения в 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()