Estoy tratando de insertar un solo valor en una tabla de Postgres con dos columnas. La primera columna es una clave principal de aumento automático, mientras que la segunda columna debe ser una variable. Investigué un poco y encontré los siguientes recursos TypeError: no todos los argumentos se convirtieron durante el formato de cadena python , ¿Cómo configurar la clave principal de incremento automático en PostgreSQL? este formato de cadena Psycopg2 con nombres de variables para la creación de tipos .
import psycopg2 try: conn = psycopg2.connect("dbname=postgres user=postgres password=actuarial") print("database created successfully.") except psycopg2.OperationalError as ex: print("Connection failed: {0}".format(ex)) cur = conn.cursor() def create_client_table(): cur.execute("CREATE TABLE ClientTable (ClientID SERIAL PRIMARY KEY, Name varchar);") print('student table created successfully') create_client_table() def client_add(): name = input("Enter the names of the student:") cur.execute("INSERT INTO CleintTable VALUES (%s)", (name)); cur.execute("SELECT * FROM StudentTable") rows = cur.fetchall() print(rows) client_add() conn.close()Al ejecutar el código anterior, aparece el siguiente error. Amablemente ayúdame a identificar dónde me estoy equivocando.
cur.execute("INSERT INTO CleintTable VALUES (%s)", (name)); TypeError: not all arguments converted during string formattingSe necesita una coma después del name para convertir esa expresión entre paréntesis en una tupla:
cur.execute("INSERT INTO CleintTable VALUES (%s)", (name,)); De lo contrario, es una secuencia de cadenas sobre la cual execute el método de ejecución.
Es posible que se deba cambiar "CleintTable" a ClientTable, a menos que intencionalmente haya nombrado la tabla de esta manera. Solo algo que noté al leer tu código, aparte de lo que estabas buscando.