使用python将任何Excel文件数据插入任何MySQL数据库

时间:2014-02-15 04:14:47

标签: python mysql excel

我希望使用python脚本将我的.xls文件数据插入到Mysql数据库中。应该在MySQL中动态创建表并动态地将数据插入到MySQL表中。这是我的代码我能够动态创建“创建表”查询但是无法创建“INSERT”查询。所以请帮助我,谢谢。

import MySQLdb
import xlrd
list = []
list1 = []
i = 0
db = MySQLdb.connect("127.0.0.1","root","rvrj","ravi")
cursor = db.cursor()
str = "create table Table1 ("
workbook = xlrd.open_workbook('C:\\Users\\Meenaraj\\Desktop\\sample - Copy.xls', formatting_info=True)
worksheet = workbook.sheet_by_name('Sheet1')
num_rows = worksheet.nrows - 1
print 'number of rows' , num_rows
num_cells = worksheet.ncols - 1
print 'number of cells' , num_cells
curr_row = 0
while i <= num_cells:
    cv=worksheet.cell_value(0,i)
    ct=worksheet.cell_type(1,i)
    print cv
    print ct
    if ct == 1:
        ct1 = "VARCHAR(20)"
    elif ct == 2:
        ct1 = "INTEGER"
    elif ct == 3:
        ct1 = "DATE"
    elif ct == 4:
        ct1 = "BOOLEAN"
    if i < num_cells:
        str = str + cv + " " + ct1 + "," + " "

    elif i == num_cells:
        str = str + cv + " " + ct1 + ");"

    list1.append(cv)
    i = i + 1

print 'number of cur' , curr_row
while curr_row < num_rows:
    curr_row += 1
    row = worksheet.row(curr_row)
    print 'Row:', curr_row
    print row
    curr_cell = -1
    while curr_cell < num_cells:
        curr_cell += 1
        # Cell Types: 0=Empty, 1=Text, 2=Number, 3=Date, 4=Boolean, 5=Error, 6=Blank
        cell_type = worksheet.cell_type(curr_row, curr_cell)
        cell_value = worksheet.cell_value(curr_row, curr_cell)
        list.append(cell_value)
        #str1 = 
        print ' ', cell_type, ':', cell_value
data = [worksheet.row_values(i) for i in xrange(worksheet.nrows)]
v=data[1]'''header/col names of My Excel files'''
print str
cursor.execute("DROP TABLE IF EXISTS Table1")
cursor.execute(str)
print "Table created"
str1="INSERT INTO Table1 (FNAME,MNAME,LNAME)VALUES(%s,%s,%s);"
values=(v[0],v[1],v[2])
r=values
cursor.execute(str1,values)
cursor.execute("select * from Table1")
try:
    results = cursor.fetchall()
    print results
    cursor.close()
    db.close()
except:
    print "Error: unable to fetch data"

2 个答案:

答案 0 :(得分:0)

你必须在执行插入查询后添加db.commit(),它会工作。我试过了。

答案 1 :(得分:0)

import pymysql
f = open(r"students.csv","r")
fstring= f.read()
print(fstring)

fList=[]
for line in fstring:
    fList.append(line)

db = pymysql.connect(host="localhost",user="root",passwd="",db="teacher")

cursor = db.cursor()

field_names = fList[0]
field_types = fList[1]

query = '''create table ter(
            id INT NOT NULL AUTO_INCREMENT,
            {0}
            '''

my_str = ''
for field_name in field_names:
    index = field_names.index(field_name)
    my_str += '{0} {1}, '.format(field_name, field_types[index])

query = query.format(my_str)
queryCreatStudentTable = """CREATE table teachweewr (
                            id INT NOT NULL AUTO_INCREMENT,
                            FIRST_NAME VARCHAR(255),
                            LAST_NAME VARCHAR(255),
                            AGE INT,
                            SEX VARCHAR(1),
                            AMOUNT FLOAT(10),
                             updated_at TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE NOW(),
                             created_at TIMESTAMP NOT NULL,
                             PRIMARY KEY(id)
                             );"""

sql = """INSERT INTO teachweewr(FIRST_NAME,LAST_NAME,AGE,SEX,AMOUNT,updated_at,created_at)
VALUES ('PRADIP','PRAJAPATI','20','M','200000','NOW()',NOW())"""
cursor.execute(sql)

 cursor.execute(queryCreatStudentTable)
db.commit()`enter code here`
db.close()