1

I'm fairly new to mysql-connector-python. I'm in the middle of learning how to use python to make my job a little easier. Could you please help?

I have a database with one table.Lets call it ‘table1’ The table is broken down with columns like this:

sent_time | delivered_time |id1_active |id2_active |id3_active |id1_inactive |id2_inactive |id3_inactive |location_active |location_inactive …..`lots more

Lets say that these are two or more customers delivering goods to and from each other. Each customer has three id#s.

Right now I want to see if I can at least print out id1_active and id2_active for all of them…ideally, I want to print the entire rows with a specific id mentioned in any of the columns…can you look below and see what I’m doing wrong and maybe help me figure out a solution for my ideal goal?

I keep getting this error

line 18, in c.writerow([id1_active,id2_active] )

TypeError: ‘str’ does not support the buffer interface

This is what I have thus far…

I created a ‘config.ini’ file to make my life a bit easier

[mysql]
host = localhost
database = db_name
user = root
password = blahblah

I created a ‘python_mysql_dbconfig.py’

from configparser import ConfigParser

def read_db_config(filename=’config.ini’, section=’mysql’):
“”” Read database configuration file and return a dictionary object
:param filename: name of the configuration file
:param section: section of database configuration
:return: a dictionary of database parameters
“””
# create parser and read ini configuration file
parser = ConfigParser()
parser.read(filename)

# get section, default to mysql
db = {}
if parser.has_section(section):
items = parser.items(section)
for item in items:
db[item[0]] = item[1]
else:
raise Exception(‘{0} not found in the {1} file’.format(section, filename))

return db

Then I created ‘export.py’

from mysql.connector import MySQLConnection, Error
from python_mysql_dbconfig import read_db_config
import csv

filename=open(‘test.csv’,’wb’)
c=csv.writer(filename)

db_config = read_db_config()
conn = MySQLConnection(**db_config)
cursor = conn.cursor()

query = (“SELECT id1_active, id2_active from table1”)

cursor.execute(query)

for id1_active, id2_active in cursor:
c.writerow([id1_active,id2_active] )

cursor.close()
filename.close()
cnn.close()

Could you tell me what I’m doing wrong?

2 Answers 2

1

You need to fetch the data and loop through data instead of cursor:

from mysql.connector import MySQLConnection, Error
from python_mysql_dbconfig import read_db_config
import csv

filename=open(‘test.csv’,’wb’)
c=csv.writer(filename)

db_config = read_db_config()
conn = MySQLConnection(**db_config)
cursor = conn.cursor()

query = (“SELECT id1_active, id2_active from table1”)

cursor.execute(query)

#You first need to fetch data
data = cursor.fetchall()
for item in data:
    c.writerow(item )

cursor.close()
filename.close()
cnn.close()
Sign up to request clarification or add additional context in comments.

1 Comment

I started messing with xlsxwriter and actually got further on my own...could you look at my code and see why I cannot select data to be exported between two datetimes?
1

I started figuring things out using xlswriter. I was able to export all data from the table but now I cannot get my code to pull the data that falls between two datetimes....it keeps telling me

    Traceback (most recent call last):
  File "C:\Python34\timerange.py", line 36, in <module>
    start_date = datetime.datetime(userIn,timeShape)
AttributeError: type object 'datetime.datetime' has no attribute 'datetime'

Please, can you tell me what I'm doing wrong?

# Establish a MySQL connection
from mysql.connector import MySQLConnection, Error
from python_mysql_dbconfig import read_db_config
db_config = read_db_config()
conn = MySQLConnection(**db_config)
import xlsxwriter
from xlsxwriter.workbook import Workbook
import datetime
from datetime import datetime
cursor = conn.cursor()

#creates the workbook
workbook = xlsxwriter.Workbook('imhere.xlsx')
worksheet = workbook.add_worksheet()

#formatting definitions
bold    = workbook.add_format({'bold': True})
date_format = workbook.add_format({'num_format': 'yyyy-mm-dd hh:mm:ss'})
timeShape =  '%Y-%m-%d %H:%M:%S'



query = ("SELECT sent_time, delivered_time, customer_name, id1_active, id2_active, id3_active, id1_inactive, id2_inactive, id3_inactive, location_active, location_inactive FROM table1 ")
"WHERE sent_time BETWEEN %s AND %s"
userIn = input("Type Start Date (YYYY-MM-DD hh:mm:ss):")
userEnd = input("Type End Date (YYYY-MM-DD hh:mm:ss):")
start_date = datetime.datetime(userIn,timeShape)
end_date = datetime.datetime(userEnd, timeShape)



# Execute sql Query
cursor.execute(query, (start_date, end_date))
#result = cursor.fetchall()


#sets up the header row
worksheet.write('A1','sent_time',bold)
worksheet.write('B1', 'delivered_time',bold)
worksheet.write('C1', 'customer_name',bold)
worksheet.write('D1', 'id1_active',bold)
worksheet.write('E1', 'id2_active',bold)
worksheet.write('F1', 'id3_active',bold)
worksheet.write('G1', 'id1_inactive',bold)
worksheet.write('H1', 'id2_inactive',bold)
worksheet.write('I1', 'id3_inactive',bold)
worksheet.write('J1', 'location_active',bold)
worksheet.write('K1', 'location_inactive',bold)
worksheet.autofilter('A1:K1')



print("sent_time", "delivered_time", "customer_name", "id1_active", "id2_active", "id3_active", "id1_inactive", "id2_inactive", "id3_inactive", "location_active", "location_inactive")
for row in cursor:
    print(row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],row[10])

# Create a For loop to iterate through each row in the XLS file, starting at row 2 to skip the headers
for r, row in enumerate(cursor, start=1):  #where you want to start printing results inside workbook
    for c, col in enumerate(row):
        worksheet.write_datetime(r,0,row[0], date_format)
        worksheet.write_datetime(r,1, row[1], date_format)
        worksheet.write(r,2, row[2])
        worksheet.write(r,3, row[3])
        worksheet.write(r,4, row[4])
        worksheet.write(r,5, row[5])
        worksheet.write(r,6, row[6])
        worksheet.write(r,7, row[7])
        worksheet.write(r,8, row[8])
        worksheet.write(r,9, row[9])
        worksheet.write(r,10, row[10])




#close out everything and save
cursor.close()
workbook.close()
conn.close()

#print number of rows and bye-bye message
print ("- - - - - - - - - - - - -")
rows = len(result)
print ("I just imported "+ str(rows) + " rows from MySQL!")
print ("")
print ("Good to Go!!!")
print ("")

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.