繁体   English   中英

使用python将值导入MySQL数据库时出现SQL语法错误

[英]SQL Syntax error while using python to import values into MySQL Database

python和MySQL的新手,我正在通过互联网和书籍自学。 我正在努力将值导入数据库表。 我一直收到一条错误,指出SQL语法不正确。 在Window 8机器上使用Python 2.7.9和MySQL Connector 5.6。

这是我收到的错误;

回溯(最近一次调用最后一次):文件“C:\\ Users \\ Oliver \\ Desktop \\ test.py”,第43行,在cursor.execute(newitem,newdata)#执行SQL语句以添加新项

文件“C:\\ Python27 \\ lib \\ site-packages \\ mysql \\ connector \\ cursor.py”,第507行,>执行self._handle_result(self._connection.cmd_query(stmt))

文件“C:\\ Python27 \\ lib \\ site-packages \\ mysql \\ connector \\ connection.py”,第722行,cmd_query结果= self._handle_result(self._send_cmd(ServerCmd.QUERY,query))

文件“C:\\ Python27 \\ lib \\ site-packages \\ mysql \\ connector \\ connection.py”,第> 640行,在_handle_result中引发errors.get_exception(包)

ProgrammingError:1064(42000):您的SQL语法有错误; 检查>与您的MySQL服务器版本对应的手册,以便在'desc'附近使用正确的语法VALUES('5012583200796','test')'在第1行

这是我写的代码;

# Add Stock bare bones
# Program that will add stock to the database

import mysql.connector

print "\t\tWelcome to the stock adding page\n"

selection = raw_input("Did you want to add stock or a new item? (Y,N)").lower()

while selection == "y":

    bcode = " " # Generate barcode variable

    while bcode == " ": # while barcode variable is empty
          bcode = raw_input("Please scan an object ") # ask for user to input barcode

    print "The barcode you scanned is", bcode

    cnx = mysql.connector.connect(user='root', password='Blackops123!', # variable to connect to foody friend database
                                     host='127.0.0.1',
                                     database='food_friend')

    cursor = cnx.cursor() # cursor to make changes to database

    query = ("SELECT barcode FROM stock_list " # query stock_list database tabelf ro barcode scanned in by user
         "WHERE barcode = %s")

    cursor.execute(query, (bcode,))# execute the query within the database

    result = cursor.fetchone() # fetch result from the query and assign variable

    if result == None: # If the barcode does not exist add a new item
        print "New item to database!\n"

        description = raw_input("Please describe product (45 character limit)") # user input for object description, limited to 45 chars as per database

        newitem = ("INSERT INTO stock_list " # SQL statement to add new item into the database with description
               "(barcode, desc) "
               "VALUES (%s,%s)")
        newdata = (bcode, description)

        cursor.execute(newitem, newdata) # executes SQL statement for adding new item

        cnx.commit() # accept addition of the new item
        print "Please scan item again as new item to add stock level" # as no stock level is added the user has to run around again. Will fix eventually

    selection = raw_input("Did you want to add stock or a new item? (Y,N)").lower()

print "returning to main menu"

end = raw_input("click something to end")

我已经尝试过在MySQL文档中建议的元组和字典中设置值条目,但是在错误中显示的值被拾取时,它已经离开了它。 我试过带有和没有单支架的%s无济于事。

任何人都可以建议我可能出错了吗?

desc是SQL中的保留字(它用于在order by子句中定义降序)。 如果你想将它用作列名,你应该使用`s来逃避它:

newitem = ("INSERT INTO stock_list " # SQL statement to add new item into the database with description
           "(barcode, `desc`) "
           "VALUES (%s,%s)")
newdata = (bcode, description)

编辑:
或者,更好的是,就像评论中的讨论所暗示的那样 - 只需将违规列重命名为不是保留字的内容,例如description

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM