Python和MySQLdb - 未插入数据,数据转换也出错

时间:2016-02-26 13:34:39

标签: python mysql python-2.7 mysql-python

我正在尝试做一个简单的

  • INSERT到本地主机MySQL 5.7 db
  • 使用Python 2.7脚本

没什么特别的,但这正是我得到的结果 - 没什么。

我在一个单独的测试脚本中逐位测试了这个令人讨厌的东西,没有引发错误但是没有数据插入到表中。问题发生在第一个SQL变量(可能),并且最后一个try / catch中有一个错误。

我想我没有正确执行数据类型转换

以下是代码:

#!/usr/bin/python

import MySQLdb
import pandas as pd 
import numpy as np 
import xlwings as xw

# ---------- Connect to Excel sheet, get data (list of lists)
wb = xw.Workbook('/users/edchigliak/sites/xlwings/baza.xlsx')
data = xw.Range('dimensions', 'A2:F71').value

# ---------- Open database connection, insert data into table
db = MySQLdb.connect("localhost","root","/pass/","budgeteer")
cursor = db.cursor()

sql 可能写得不好:

sql = """INSERT INTO dimensions(dimension, dimType, abbreviation, translationHr, code) VALUES (%s, %d, %s, %s, %d)"""  

for row in data:
    try:
        cursor.execute(sql, row)
        db.commit()
    except:
        db.rollback()


# ---------- Check if INSERT successful
sql = """SELECT * FROM dimensions"""

try:
    cursor.execute(sql)

    # ---------- Fetch all the rows in a list of lists
    results = cursor.fetchall()

for row in cursor:

    id = row[0]
    dimension = row[1]
    dimType = row[2]
    abbreviation = row[3]
    translationHr = row[4]
    code = row[5]

这是错误,转到"除了":

  

错误:无法获取数据。

    # Now print fetched result
    print "Dim. ID: %d, Dim.: %s, Dim. type: %d, Abbrev.: %d, Translat.: %s, Code: %d" % (id, dimension, dimType, abbreviation, translationHr, code)

except:
    print "Error: unable to fetch data"

db.close()

如果我删除try block:

  

python git:master❯python proba.py
  追溯(最近的呼叫最后):
  文件" proba.py",第47行,在   打印"昏暗。 ID:%d,Dim。:%s,昏暗。类型:%d,缩写:%d,Translat。:%s,   代码:%d" %(id,dimension,dimType,abbreviation,translationHr,code)   TypeError:%d format:需要一个数字,而不是str
  python git:master❯

对于它的价值,这是在脚本开头从E​​xcel中读取的列表示例(可能'没有'正在出现问题?):

  

[1.0,你' austria',1.0,你' at',None,4.0]
  [2.0,你'比利时',1.0,你',',无,7.0]
  [3.0,你'捷克',1.0,你' cz',无,9.0]

1 个答案:

答案 0 :(得分:1)

无论值的类型如何,您都应始终使用%s作为参数标记(而不是%d等):

sql = ("INSERT INTO dimensions(dimension, dimType, abbreviation, "
       "translationHr, code) VALUES (%s, %s, %s, %s, %s)")
cursor.execute(sql, row)

数据库驱动程序将为您处理任何引用。