Ошибка синтаксиса запроса mysql
Ошибка синтаксиса запроса к таблице бд.
def connect():
try:
connection = pymysql.connect(
host="localhost",
port=3306,
user="root",
password="soldan1512",
database="chat_base",
cursorclass=pymysql.cursors.DictCursor
)
print("successfully connected...")
print("#" * 20)
try:
# cursor = connection.cursor()
with connection.cursor() as cursor:
create_table_query = "CREATE TABLE IF NOT EXISTS `users_socket`(id INT PRIMARY KEY," \
"login TEXT, " \
"password BLOB," \
"socket VARCHAR," \
"FOREIGN KEY(id) REFERENCES registration_table(id));"
cursor.execute(create_table_query)
print("Table created successfully")
finally:
connection.close()
except Exception as ex:
print("Connection refused...")
print(ex)
Таблица на которую ссылаются также создана. Вот код для нее
def connect():
try:
connection = pymysql.connect(
host="localhost",
port=3306,
user="root",
password="soldan1512",
database="chat_base",
cursorclass=pymysql.cursors.DictCursor
)
print("successfully connected...")
print("#" * 20)
try:
# cursor = connection.cursor()
with connection.cursor() as cursor:
create_table_query = "CREATE TABLE IF NOT EXISTS `registration_table`(id INT," \
"login TEXT, " \
"password BLOB," \
"salt BLOB," \
"status TEXT," \
"PRIMARY KEY (id));"
cursor.execute(create_table_query)
#drop_table_query = "DROP TABLE `registration_table`;"
#cursor.execute(drop_table_query)
print("Table created successfully")
finally:
connection.close()
except Exception as ex:
print("Connection refused...")
print(ex)
Объясните, что я сделал не так. Ошибка в первой части кода. Вот текст ошибки:
(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ',FOREIGN KEY(id) REFERENCES registration_table(id))' at line 1")
Ответы (2 шт):
Автор решения: anar1501
→ Ссылка
Думаю, нужно в конце точку с запятой удалить "FOREIGN KEY(id) REFERENCES registration_table(id));"
Автор решения: Akina
→ Ссылка
MySQL всегда начинает цитату части запроса в сообщении об ошибке ровно в той точке, в которой обнаруживается проблема. Ни вправо ни влево - а тычут пальцем точно в самую дырочку.
В данном случае цитируется
,FOREIGN KEY(id) REFERENCES registration_table(id))
Добавляем то, что перед:
socket VARCHAR,FOREIGN KEY(id) REFERENCES registration_table(id));
и понимаем, что сервер вместо запятой хотел бы увидеть скобки, внутри которых задаётся размер для типа данных VARCHAR.