Python MySQLdb получил неверный синтаксис при попытке вставить таблицу INTO - PullRequest
1 голос
/ 27 марта 2010
## COMMENT OUT below just for reference
""
cursor.execute ("""
    CREATE TABLE yellowpages
    (
        business_id     BIGINT(20) NOT NULL AUTO_INCREMENT,
        categories_name VARCHAR(255),
        business_name   VARCHAR(500) NOT NULL,
        business_address1 VARCHAR(500),
        business_city VARCHAR(255),
        business_state VARCHAR(255),
        business_zipcode VARCHAR(255),
        phone_number1 VARCHAR(255),
        website1 VARCHAR(1000),
        website2 VARCHAR(1000),
        created_date datetime,
        modified_date datetime,
        PRIMARY KEY(business_id)
    )
""")
""
## TOP COMMENT OUT (just for reference)

## code
website1g = "http://www.triman.com"
business_nameg = "Triman Sales Inc"
business_address1g = "510 E Airline Way"
business_cityg = "Gardena"
business_stateg = "CA"
business_zipcodeg = "90248"
phone_number1g = "(310) 323-5410"
phone_number2g = ""
website2g = ""

cursor.execute ("""
    INSERT INTO yellowpages(categories_name, business_name, business_address1, business_city, business_state, business_zipcode, phone_number1, website1, website2)
    VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s')
""", (''gas-stations'', business_nameg, business_address1g, business_cityg, business_stateg, business_zipcodeg, phone_number1g, website1g, website2g))


cursor.close()
conn.close()

Я получаю эту ошибку

  File "testdb.py", line 51
    """, (''gas-stations'', business_nameg, business_address1g, business_cityg, business_stateg, business_zipcodeg, phone_number1g, website1g, website2g))
              ^
SyntaxError: invalid syntax

есть идеи почему?

Заранее спасибо за помощь


Обновление № 2, я удалил двойную одинарную кавычку для "category_name", но теперь даже

import MySQLdb  

conn =  MySQLdb.connect(host="localhost",port=22008,user="cholestoff",passwd="whoami",db="mydatabase")  
cursor = conn.cursor()  

## Find mysql version  
cursor.execute ("SELECT VERSION()")  
row = cursor.fetchone()  
print "server version:", row[0]  

website1g = "http://www.triman.com"  
business_nameg = "Triman Sales Inc"  
business_address1g = "510 E Airline Way"  
business_cityg = "Gardena"  
business_stateg = "CA"  
business_zipcodeg = "90248"  
phone_number1g = "(310) 323-5410"  
phone_number2g = ""  

cursor.execute ("""
    INSERT INTO yellowpages(categories_name, business_name)
    VALUES ('%s','%s')
""", ('gas-stations', business_nameg))              

cursor.close()  
conn.close()  

все еще получил эту ошибку

server version: 5.1.33-community  
Traceback (most recent call last):  
  File "testdb.py", line 23, in <module>  
    """, ('gas-stations', business_nameg))  
  File "C:\Python26\lib\site-packages\MySQLdb\cursors.py", line 173, in execute  
    self.errorhandler(self, exc, value)  
  File "C:\Python26\lib\site-packages\MySQLdb\connections.py", line 36, in   defaulterrorhandler  
    raise errorclass, errorvalue  
_mysql_exceptions.ProgrammingError: (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 'gas-stations'',''Triman Sales Inc'')' at line 2")

Еще раз спасибо за помощь

Ответы [ 4 ]

2 голосов
/ 27 марта 2010

Я думаю, что ваша проблема здесь:

''gas-stations''

Это дает синтаксическую ошибку. Вы, вероятно, хотите использовать один набор цитат:

'gas-stations'

Если вы хотите вставить значение 'gas-stations' в базу данных, включая кавычки, вы можете либо экранировать кавычки, либо заключить строку в двойные кавычки вместо одинарных кавычек:

"'gas-stations'"

Причина, по которой «стрелка вверх» указывает на неправильное место, заключается в том, что ваши строки настолько длинные, что они переносятся на консоль. Сделайте ваши строки короче или расширьте окно консоли, чтобы увидеть, где на самом деле ошибка.

1 голос
/ 28 марта 2010

Для вашей второй проблемы вам нужно потерять все эти одинарные кавычки в предложении VALUES ... должно выглядеть как VALUES (%s,%s), а не VALUES ('%s','%s').

Общие правила очень просты: для каждого параметра укажите в своем SQL-выражении один маркер места (в случае mySQLdb это %s) и укажите одно выражение Python в вашем наборе параметров. Затем откиньтесь назад и позвольте программному обеспечению интерфейса сделать то, что вам нужно. Это включает в себя правильное цитирование строк. Не пытайтесь делать это самостоятельно. В частности, строковые выражения должны быть именно тем, что вы ожидаете получить позже.

Пример: business_name бензоколонки - это "O'Reilly's Pump'n'Go" как строковая константа Python. Это будет в конечном итоге в построенном SQL как ...VALUES(...,'O''Reilly''s Pump''n''Go',... без необходимости думать об этом.

0 голосов
/ 30 сентября 2015

Я также получил такую ​​ошибку, и я решил ее, заменив «% s» на% s под значениями.

    VALUES(%s,%s)
0 голосов
/ 27 марта 2010

Вы не можете использовать двойные одинарные кавычки (т.е. ''gas-stations'') - используйте либо одинарные одинарные кавычки ('gas-stations'), либо фактические двойные кавычки ("gas-stations").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...