python:在mysql中以字符串的形式添加数据会产生奇怪的效果

2024-05-20 20:21:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我对一段python代码有个奇怪的问题。你知道吗

其工作原理: 1输入条形码(目前为硬编码); 2在本地mysqldb中查找条形码,如果没有找到,则通过datakick的api查找条形码,如果也没有找到,则执行步骤3 三。我想将条形码添加到本地mysqldatabase并请求一些输入。你知道吗

现在的问题是:它有效!只要您填写naamProduct的数字。如果您使用字母(例如,我填写Bla作为产品名),我会得到一个奇怪的SQL错误(_mysql_exceptions.OperationalError: (1054, "Unknown column 'Bla' in 'field.list'")

我已经检查了mysql中的表,类型都可以。名称应以文本结尾的表。我还尝试了一个硬编码字符串,它工作得很好。从mysql控制台使用sql查询也可以很好地工作。我猜输入部分出了问题,但我不知道是什么。你知道吗

(我知道,除了一些例外,代码仍然不是很整洁;)一步一步地工作)

`

def barcodeFunctie(sql):
    con = mdb.connect ('localhost', 'python', 'python', 'stock')
    cur = con.cursor()
    cur.execute(sql)
    ver = cur.fetchone();
    con.commit()
    con.close()
    return ver

#barcode = '8710624957278'
#barcode = '2147483647'
barcode = '123'

#zoeken op barcode. Barcode is ook de sleutel in de tabel.
sql = "select * from Voorraad where Id=%s" % barcode

if barcodeFunctie(sql) == "None":
    print "geen output"
else:
    try:
            url='https://www.datakick.org/api/items/'+barcode
            data = json.load(urllib2.urlopen(url))
            print data['brand_name'], data['name']
    except:
            #barcode komt niet voor in eigen db en niet in db van datakick, in beide toevoegen
            print barcode, " barcode als input"

            naamProduct = str(raw_input("Wat is de naam van het product? "))
            hoeveelheidProduct = raw_input("Hoeveel inhoud heeft het product? ")

            sql = "insert into Voorraad (Id, NaamProduct,HoeveelHeidProduct) values (%s,%s,%s)" % (barcode, naamProduct, hoeveelheidProduct)
            barcodeFunctie(sql)
            print "meuktoegevoegd! :D"

`


Tags: 代码ininputsqldatamysqldecon
2条回答

我相信您错过了所有字符串占位符的单引号。这就解释了为什么它只适用于数字而不适用于字符串。你知道吗

我没有测试它,但我认为您的SQL语句应该如下所示:

sql = "insert into Voorraad (Id, NaamProduct,HoeveelHeidProduct) values ('%s','%s','%s')" % (barcode, naamProduct, hoeveelheidProduct)
sql = "select * from Voorraad where Id=%s" % barcode

您的问题是缺少ID的引号。请将上面的行更改为:

sql = "select * from Voorraad where Id='%s'" % barcode

相关问题 更多 >