[英]Syntax error when trying to insert record into posgtresql
When I am trying to insert a record into Postgresql I am getting below error.当我尝试将记录插入 Postgresql 时,我遇到了错误。
pg8000.exceptions.DatabaseError: {'S': 'ERROR', 'V': 'ERROR', 'C': '42601', 'M': 'syntax error at or near ","', 'P': '345', 'F': 'scan.l', 'L': '1150', 'R': 'scanner_yyerror'} pg8000.exceptions.DatabaseError: {'S': 'ERROR', 'V': 'ERROR', 'C': '42601', 'M': '","' 或附近的语法错误, 'P': '345','F':'scan.l','L':'1150','R':'scanner_yyerror'}
Below is my python code snippet where I am getting an error:下面是我收到错误的 python 代码片段:
def insert_data(metadata):
if type(metadata) == dict: metadata = [metadata]
print("Metadata = ", metadata)
for detail in metadata:
detail["dismissed"] = check_if_dismissed(detail["uuid"])
cols = ",".join(detail.keys())
print("Cols: ", cols)
qmarks = ','.join(['?' for s in detail.keys()])
print("Qmarks: ", qmarks)
# values = [v for v in detail.values()]
values = []
for v in detail.values():
if isinstance(v, list):
values.append(json.dumps(v))
else:
values.append(v)
print("Values: ", values)
insert_statement = "INSERT INTO %s (%s) VALUES (%s);" % (TABLE_NAME, cols, qmarks)
print("Insert Statement: ", insert_statement)
conn = get_conn()
conn.insert_record(insert_statement, str(values))
Can anybody please help me to resolve this error?有人可以帮我解决这个错误吗?
pg8000 uses "name" style placeholders for values pg8000 对值使用“名称”样式的占位符
SELECT * FROM tbl WHERE name = :name
which are passed to the connection's run
method as keyword arguments.它们作为关键字 arguments 传递给连接的run
方法。 It's not clear what conn.insert_record
is - I don't see it in pg8000's README - but to build a similar statement using pg8000 you could do this:目前尚不清楚conn.insert_record
是什么——我在 pg8000 的自述文件中没有看到它——但是要使用 pg8000 构建一个类似的语句,你可以这样做:
import pg8000.native
DDL = """CREATE TABLE IF NOT EXISTS table_name (
name varchar,
age integer
)
"""
conn = pg8000.native.Connection(...)
conn.run(DDL)
table = 'table_name'
data = {'name': 'Alice', 'age': 42}
cols = ', '.join(f'"{k}"' for k in data.keys())
vals = ', '.join(f':{k}' for k in data.keys())
stmt = f"""INSERT INTO "{table}" ({cols}) VALUES ({vals})"""
conn.run(stmt, **data)
conn.close()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.