python 为自动增量添加 SEQUENCE 时 postgresql 插入错误
python postgresql insert error while adding SEQUENCE for auto increment
下面主要是依赖的一切
authorname="samuel"
bugid=1222
filename="mila.txt"
conn = None;
cursor = None;
conn = pg8000.connect(database="postgres", user="postgres", password="root", host="localhost")
cursor = conn.cursor()
def createTables():
cursor.execute("CREATE SEQUENCE FILE_id_seq")
cursor.execute("CREATE TABLE FileTable(ID INT UNIQUE NOT NULL DEFAULT NEXTVAL('FILE_id_seq'), filename varchar(250) NOT null UNIQUE )")
cursor.execute("CREATE SEQUENCE Author_id_seq")
conn.commit()
return
def insert_filename(filename1):
cursor.execute('INSERT INTO FileTable (filename) VALUES (%s)', (filename1))
conn.commit()
return
insert_filename(filename)
插入时出现错误
ps = cache['ps'][key]
KeyError: ((705, 705, 705, 705, 705), 'INSERT INTO FileTable (filename) VALUES (%s)')
g8000.ProgrammingError: (b'ERROR', b'42P18', b'could not determine data type of parameter
注意:对于串行数据类型,我有同样的错误。我更新了代码
仍然不确定 (705, 705, 705, 705, 705)
元组的来源...cache
相关代码不在代码主体中...
但是,有几件事...
createTables
从未被调用。
(filename1)
不是 execute
的有效参数。那不是 元组 。对于单项 tuples,你需要添加一个尾随逗号,即 (filename1,)
.
当我添加对 createTables
的调用并将参数更改为具有尾随逗号时,使用您的 insert_filename
代码自动递增对我来说效果很好。
下面主要是依赖的一切
authorname="samuel"
bugid=1222
filename="mila.txt"
conn = None;
cursor = None;
conn = pg8000.connect(database="postgres", user="postgres", password="root", host="localhost")
cursor = conn.cursor()
def createTables():
cursor.execute("CREATE SEQUENCE FILE_id_seq")
cursor.execute("CREATE TABLE FileTable(ID INT UNIQUE NOT NULL DEFAULT NEXTVAL('FILE_id_seq'), filename varchar(250) NOT null UNIQUE )")
cursor.execute("CREATE SEQUENCE Author_id_seq")
conn.commit()
return
def insert_filename(filename1):
cursor.execute('INSERT INTO FileTable (filename) VALUES (%s)', (filename1))
conn.commit()
return
insert_filename(filename)
插入时出现错误
ps = cache['ps'][key]
KeyError: ((705, 705, 705, 705, 705), 'INSERT INTO FileTable (filename) VALUES (%s)')
g8000.ProgrammingError: (b'ERROR', b'42P18', b'could not determine data type of parameter
注意:对于串行数据类型,我有同样的错误。我更新了代码
仍然不确定 (705, 705, 705, 705, 705)
元组的来源...cache
相关代码不在代码主体中...
但是,有几件事...
createTables
从未被调用。(filename1)
不是execute
的有效参数。那不是 元组 。对于单项 tuples,你需要添加一个尾随逗号,即(filename1,)
.
当我添加对 createTables
的调用并将参数更改为具有尾随逗号时,使用您的 insert_filename
代码自动递增对我来说效果很好。