我正在尝试构建一个货币支出监视器,并从db开始。
我有一个用于建立表的脚本:

def create_table(name):
    conn = db.connect(dbname='Money_Tracker' ,user="",password="",host="",port="")
    cur = conn.cursor()
    cur.execute(f"CREATE TABLE IF NOT EXISTS {name}(ID SERIAL PRIMARY KEY ,F_Name VARCHAR, L_Name VARCHAR, Expense INT, Category VARCHAR  )")
    conn.commit()
    conn.close()


并创建了一个表

create_table("money_spent")


其次,我构建了一个函数以将数据插入表中:

def add_money_spent(Firstname, Lastname, Amount, Cat):
    conn = db.connect(dbname='Money_Tracker' ,user="",password="",host="",port="")
    cur = conn.cursor()
    cur.execute("INSERT INTO money_spent VALUES(%s, %s, %s, %s)",(Firstname,Lastname,Amount,Cat))
    conn.close()


并打算像这样使用它:

add_money_spent("Michael","Ben-Haym",15,"Cofee")


当我运行代码时,出现错误sycopg2.errors.InvalidTextRepresentation:类型整数的无效输入语法:“ Cofee”
第1行:... INTO money_spent VALUES(15,“ Michael”,“ Ben-Haym”,“ Cofee”)

似乎代码认为cofee应该是一个整数,即使我在表中指定类别应该是varchar
有人可以向我解释我该如何解决?
谢谢 :)

最佳答案

看来列顺序是随机的。因此,您必须指定它:

cur.execute("""INSERT INTO money_spent (F_name, L_Name, Expense, Category)
               VALUES(%s, %s, %s, %s);""",(Firstname,Lastname,Amount,Cat))


然后,请确保通过以下方式提交更改:

conn.commit()


关闭连接之前。

10-07 15:42