psycopg2 在执行语句中抱怨文本 : 和 amazonaws
psycopg2 complaining about text : and amazonaws in execute statement
相当烦人,不知道如何修复,但这是我的 psycopg2 代码。它在 lambda 函数上 运行。
conn = psycopg2.connect(
host='nope',
database='nope',
user='nope',
password='nope'
)
cur = conn.cursor()
url = "https://nope.s3.us-east-2.amazonaws.com/" + str(rawbucketkey)
cur.execute('''
UPDATE contentcreatorcontentfeedposts_contentfeedpost
SET picturemediatype = TRUE, mediakey = ''' + str(rawbucketkey) + ''',
mediaurl=''' + url + ''',
active = TRUE, postsubmit = FALSE
WHERE contentcreator = ''' + userid + '''AND
id =''' + contentpostid + ''';
COMMIT;
''')
cur.close()
看看这一行
mediaurl=''' + url + ''',
url就是上面代码中提到的:
url = "https://nope.s3.us-east-2.amazonaws.com/" + str(rawbucketkey)
我得到 syntaxError
语句,它指向 :
和 amazonaws
这一行中的文本 url = "https://nope.s3.us-east-2.amazonaws.com/" + str(rawbucketkey)
我不知道为什么。这是让我想停止编码并住在山区的问题类型=(帮助为什么会发生这种情况?
这里是准确的错误信息
[ERROR] SyntaxError: syntax error at or near "amazonaws"
LINE 4: ... mediaurl=https//shofi-mod.s3.us-east-2.amazonaws....
^
Traceback (most recent call last):
File "/var/task/lambdarunner.py", line 154, in lambda_handler
cur.execute('''
将参数作为字符串插入到您的SQL中是very bad security。你应该传递参数以确保没有SQL注入。
您的问题可能可以通过将您的语句用双引号引起来解决,而不是使用 3 个单引号:
cur.execute("
UPDATE contentcreatorcontentfeedposts_contentfeedpost
SET picturemediatype = TRUE, mediakey = '" + str(rawbucketkey) + "',
mediaurl='" + url + "',
active = TRUE, postsubmit = FALSE
WHERE contentcreator = '" + userid + "' AND
id = '" + contentpostid + "';
COMMIT;
")
或者,您可以使用 Python f 字符串:
cur.execute(f"
UPDATE contentcreatorcontentfeedposts_contentfeedpost
SET picturemediatype = TRUE, mediakey = '{str(rawbucketkey)}',
mediaurl='{url}',
active = TRUE, postsubmit = FALSE
WHERE contentcreator = '{userid}' AND
id ='{contentpostid}';
COMMIT;
")
但是,请研究传递参数的正确方法,否则您的应用很可能被黑客入侵。
相当烦人,不知道如何修复,但这是我的 psycopg2 代码。它在 lambda 函数上 运行。
conn = psycopg2.connect(
host='nope',
database='nope',
user='nope',
password='nope'
)
cur = conn.cursor()
url = "https://nope.s3.us-east-2.amazonaws.com/" + str(rawbucketkey)
cur.execute('''
UPDATE contentcreatorcontentfeedposts_contentfeedpost
SET picturemediatype = TRUE, mediakey = ''' + str(rawbucketkey) + ''',
mediaurl=''' + url + ''',
active = TRUE, postsubmit = FALSE
WHERE contentcreator = ''' + userid + '''AND
id =''' + contentpostid + ''';
COMMIT;
''')
cur.close()
看看这一行
mediaurl=''' + url + ''',
url就是上面代码中提到的:
url = "https://nope.s3.us-east-2.amazonaws.com/" + str(rawbucketkey)
我得到 syntaxError
语句,它指向 :
和 amazonaws
这一行中的文本 url = "https://nope.s3.us-east-2.amazonaws.com/" + str(rawbucketkey)
我不知道为什么。这是让我想停止编码并住在山区的问题类型=(帮助为什么会发生这种情况?
这里是准确的错误信息
[ERROR] SyntaxError: syntax error at or near "amazonaws"
LINE 4: ... mediaurl=https//shofi-mod.s3.us-east-2.amazonaws....
^
Traceback (most recent call last):
File "/var/task/lambdarunner.py", line 154, in lambda_handler
cur.execute('''
将参数作为字符串插入到您的SQL中是very bad security。你应该传递参数以确保没有SQL注入。
您的问题可能可以通过将您的语句用双引号引起来解决,而不是使用 3 个单引号:
cur.execute("
UPDATE contentcreatorcontentfeedposts_contentfeedpost
SET picturemediatype = TRUE, mediakey = '" + str(rawbucketkey) + "',
mediaurl='" + url + "',
active = TRUE, postsubmit = FALSE
WHERE contentcreator = '" + userid + "' AND
id = '" + contentpostid + "';
COMMIT;
")
或者,您可以使用 Python f 字符串:
cur.execute(f"
UPDATE contentcreatorcontentfeedposts_contentfeedpost
SET picturemediatype = TRUE, mediakey = '{str(rawbucketkey)}',
mediaurl='{url}',
active = TRUE, postsubmit = FALSE
WHERE contentcreator = '{userid}' AND
id ='{contentpostid}';
COMMIT;
")
但是,请研究传递参数的正确方法,否则您的应用很可能被黑客入侵。