Psycopg2 errors syntaxerror
Psycopg2 выдает мне эту ошибку всякий раз, когда я пытаюсь обновить строку:
Traceback (most recent call last):
File “p:/Projects/Freelance/Optometry_Inventory/code/tester.py”, line 39, in <module>
new_user.updateUser(*(fname, lname, username, role, hashed_pwd, user_id))
File “p:\Projects\Freelance\Optometry_Inventory\code\UserDC.py”, line 64, in updateUser
cursor.execute(update_query, args)
psycopg2.errors.SyntaxError: syntax error at or near “lname”
LINE 1: UPDATE users SET fname= (‘a’), SET lname= (‘b’),
Когда я запускаю следующую функцию:
def updateUser(self, user_id):
self.user_id = user_id
update_query = “””UPDATE users SET fname= %s, SET lname= (%s),
SET username= (%s), SET user_role= (%s), SET h_pwd= (%s), WHERE user_id= (%s)”””
with pool() as cursor:
cursor.execute(update_query, (self.fname, self.lname, self.user_name,
self.user_role, self.user_pwd, self.user_id))
Я попытался просто обновить одно поле, и я все еще получаю ту же ошибку. Есть ли что-то еще, чего мне не хватает? Код ошибки не дает мне много информации.
Ответ
Проблема в том, что вы избыточно записываете SETдля каждого измененного столбца, одного SETболее чем достаточно 🙂
def updateUser(self, user_id):
self.user_id = user_id
update_query = “””
UPDATE users
SET fname= %s,
lname= (%s),
username= (%s),
user_role= (%s),
h_pwd= (%s)
WHERE user_id= (%s)”””
with pool() as cursor:
cursor.execute(update_query, (self.fname, self.lname, self.user_name,
self.user_role, self.user_pwd, self.user_id))
Если вы выполняете несколько обновлений одновременно, вы также можете взглянуть на execute_values . В UPDATEразделе execute_values ссылки есть пример.
При создании таблица возникла ошибка как как ее решить?
Всем привет хочу создать таблицу в postgresql через python но возникает ошибка( cur.execute(“””CREATE TABLE {}
psycopg2.errors.SyntaxError: ОШИБКА: ошибка синтаксиса (примерное положение: “688093622”)) вот код:
if user_id_v not in mas_user_id:
mas_user_id.append(user_id_v)
print(‘Новый пользователь БОТА: ‘, mas_user_id[-1])
conn = psycopg2.connect(
host=’localhost’,
database=”,
user=”,
password=”,
port=5432
)
cur = conn.cursor()
# Создание таблицы
# Создание таблицы
cur.execute(f”’CREATE TABLE {user_id}
(ADMISSION INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
COURSE CHAR(50),
DEPARTMENT CHAR(50));”’)
print(“Table created successfully”)
conn.commit()
conn.close()
conn.commit()
conn.close()
Ответ
cur.execute(f”’CREATE TABLE “{user_id}”
(ADMISSION INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
COURSE CHAR(50),
DEPARTMENT CHAR(50));”’)
Если уж используете что попало в именах таблиц, то используйте двойные кавычки