【问题标题】:flask postgresql ERROR: syntax error at or near " [duplicate]烧瓶 postgresql 错误:“ [重复] 处或附近的语法错误
【发布时间】:2018-09-28 01:29:39
【问题描述】:

我是烧瓶和开发的新手,一般来说,这个错误太主观了,即使在看到 stackoverflow 上的几篇帖子后我也无法谷歌搜索,我无法弄清楚一切都是正确的,实际上我正在拉扯我的头发

@app.route("/bookPage/<all>" , methods=["GET" , "POST"])
def bookPage(all):
    global all2
    if request.method == "POST":

        #variables
        list1 = ['101','milk','3','jack','2018-09-27 16:33:58.553349' ]

        db.execute("INSERT INTO review_table (id, review, rate , user , time_t) VALUES (:id, :review, :rate , :user , :time_t)" , {"id" : list1[0], "review" : list1[1], "rate": list1[2] ,"user":list1[3] , "time_t" :list1[4] })
        db.commit()
        print( f"review has been added of value : ,{review} \n ,and rate of :  , { rate_i} ,\n , by user : , { user_i }, \n, and Id : , {id_i}" )
    else:

        print("\n\n",all,"\n\n")
        all1 = all.split(",")
        all2 =[a.strip("()").replace("'","") for a in all1]




    return render_template("bookPage.html",all1=all2)

每次我执行它时,我都会收到此错误(错误:“用户”处或附近的语法错误)他指向“用户”中的“用户”

"INSERT INTO review_table (id, review, rate , user , time_t)

一切都正确,我是 nw,但我已经多次执行 db

db 中的表是空的 postgresql 列

列类型注释

  • id 整数

  • 审查字符变化NULL

  • 率整数NULL

  • 用户字符变化 NULL

  • time_t 时间不带时区 NULL

    请告诉我为什么这种情况不断发生 我用常量字符串“test”更改了用户输入我得到了同样的错误...... 我认为该错误具有误导性

【问题讨论】:

  • 错误是准确的:您的列列表包含关键字user。如果您希望使用与关键字冲突的标识符,则必须使用带引号的标识符。

标签: python postgresql sqlalchemy psycopg2


【解决方案1】:

在将值发送到数据库之前,您需要将它们转换为正确的类型。

    user_i = ''
    rate_i = request.form.get("rate", type=int)
    user_i = session['user']
    time_i = datetime.now()
    id_i = int(all2[0])

    db.execute("INSERT INTO review_table (id, review, rate , user , time_t) VALUES (?, ?, ? , ? , ?)" , (id_i, review_i, rate_i , user_i , time_i ))

【讨论】:

  • id_i = int(all2[0]) , rate_i = request.form.get("rate", type=int) ,我都替换了,但没有用,同样的错误 - 错误:语法错误在“用户”处或附近——我应该将 time_i 转换为什么?
  • 您也需要转换时间。到UTC日期时间。
【解决方案2】:

让您的数据库用时间和日期填充该字段,添加到您的CREAT TABLE这个:

time_t time without time zone DEFAULT current_timestamp

并且在您的INSERT 中不要使用 time_t:

    db.execute("INSERT INTO review_table (id, review, rate , user ) VALUES (:id, :review, :rate , :user )" , {"id" : list1[0], "review" : list1[1], "rate": list1[2] ,"user":list1[3] })

您可以找到此解决方案的其他变体:Sqlite: CURRENT_TIMESTAMP is in GMT, not the timezone of the machine

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 2020-03-15
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    相关资源
    最近更新 更多