#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()