我正在尝试构建一个货币支出监视器,并从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()
关闭连接之前。