Ошибка программирования при создании MySQL Table - PullRequest
0 голосов
/ 18 октября 2019

@ Я перевожу ввод от пользователя в команду MySQL, но он говорит, что у меня неправильный синтаксис, и Idk, как я могу это исправить. По сути, я создал программу на python (не проблема с кодом python), которая способна создавать таблицы MySQL и преобразовывать пользовательский ввод в команду MySQL для создания таблицы, но я думаю, что я неправильно сформулировал команду и мне нужен кто-то, чтобыпомогите объяснить, что я сделал не так и как я могу это исправить или каким-то другим способом (нет новых пакетов python, только другая команда MySQL).

#Error
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 ''c1', 'c2') VALUES [('r1', 'r2')]' at line 1

#here is what i was collecting in my attempt to fix the bug
'''
ROW SYNTAX: [('r1', 'r2')]
COLUMN SYNTAX: ('c1', 'c2')
MySQL COMMAND: CREATE TABLE test ('c1', 'c2') VALUES [('r1', 'r2')]
'''
#just the values none of the ROW SYNTAX or COLUMN SYNTAX is actually put into the mysql command

Я ожидал, что он создаст таблицу с:

2 столбца: c1 и c2

1 строка с 2 значениями: r1 и r2

Тем не менее, как я объяснил выше ... это не так. Я не работаю с MySQL, а просто с Python, поэтому мне, вероятно, не хватает чего-то очень простого или большого, чего я просто не понимаю.

Я видел пример синтаксиса, похожего на этот, но опять же, я нене понимаю.

ОБНОВЛЕНИЕ

'''
ROW SYNTAX: [('r1', 'r3'), ('r2', 'r4')]
COLUMN SYNTAX TCOLN: (c1, c2)
COLUMN SYNTAX COLNAMES: (c1 VCHAR(255), c2 VCHAR(255))

CREATE TABLE COMMAND: CREATE TABLE test (c1 VCHAR(255), c2 VCHAR(255));
INSERT TABLE COMMAND: INSERT INTO test (c1, c2) VALUES [('r1', 'r3'), ('r2', 'r4')];
'''
'''
Traceback (most recent call last):
  line 472, in cmd_query
    raw_as_string=raw_as_string)
_mysql_connector.MySQLInterfaceError: 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 'VCHAR(255), c2 VCHAR(255))' at line 1

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  line 558, in ctable
    cursor.execute(sqlCol) #slqCol is CREATE TABLE test (c1 VCHAR(255), c2 VCHAR(255));
  line 266, in execute
    raw_as_string=self._raw_as_string)
  line 475, in cmd_query
    sqlstate=exc.sqlstate)
mysql.connector.errors.ProgrammingError: 1064 (42000): 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 'VCHAR(255), c2 VCHAR(255))' at line 1
'''

Благодаря вашим предложениям я сейчас использую VARCHAR, но мне все еще кажется, что я столкнулся с той же проблемой

Благодаря@Martin для объяснения, что такое varchar, также оказалось, что VCHAR - это не то же самое, что VARCHAR (спасибо @robsiemb). Теперь таблица создает, НО не помещает значения данных в? (это может быть проблема с Python, надеюсь, нет)

'''
INSERT TABLE COMMAND: INSERT INTO test (c1, c2) VALUES ('r1', 'r2'),('rr1', 'rr2');
'''

# LATEST UPDATE
New Error when inserting values
```python

#CREATE TABLE COMMAND: CREATE TABLE test (c1 VARCHAR(255), c2 VARCHAR(255));
#INSERT TABLE COMMAND: INSERT INTO test (c1, c2) VALUES (r1,r3),(r2,r4);

'''
Traceback (most recent call last):
  line 472, in cmd_query
    raw_as_string=raw_as_string)
_mysql_connector.MySQLInterfaceError: Unknown column 'r1' in 'field list'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  line 563, in ctable
    cursor.execute(sqlVal)
  line 266, in execute
    raw_as_string=self._raw_as_string)
  line 475, in cmd_query
    sqlstate=exc.sqlstate)
mysql.connector.errors.ProgrammingError: 1054 (42S22): Unknown column 'r1' in 'field list'
'''

Проблема с Python, спасибо за ответ на мой вопрос!

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Вы должны проверить синтаксис и пример , чтобы узнать, как создать таблицу MySQL.

Есть две проблемы с оператором CREATE TABLE.

  • Вам необходимо указать типы столбцов, например:
CREATE TABLE test (c1 INTEGER, c2 INTEGER);
  • Вы не можете указывать значения одновременно с командой create, но можетедобавьте оператор вставки :
INSERT INTO test (c1, c2) VALUES (1, 3),(2, 4);

Выше приведена таблица с двумя строками, например:

mysql> SELECT * FROM test;
+------+------+
| c1   | c2   |
+------+------+
|    1 |    3 |
|    2 |    4 |
+------+------+
0 голосов
/ 18 октября 2019

Проблема с тем, что вы делаете, заключается в следующем:

CREATE TABLE test ('c1', 'c2') VALUES [('r1', 'r2')]

Это недопустимое утверждение CREATE TABLE.

Похоже, вы пытаетесь создатьтаблицу, а затем вставьте в нее некоторые значения. Так ли это?

Если так, то это следует разбить на два утверждения. Сначала создайте таблицу:

CREATE TABLE test (c1 DATATYPE, c2 DATATYPE);

Замените DATATYPE типом создаваемого вами столбца (т. Е. INT, VARCHAR(10) и т. Д.).

Во-вторых, вставьтеваши значения в таблицу:

INSERT INTO test (c1, c2) VALUES (r1, r2);
...