Hi,
I have created a program in Python which creates a database called inb104 and loads the data from text files into the mySQL server. The code works perfectly fine. The data is inserted into the table without any issues. The problem is that I would like to place the code into functions. I will also show that code. I tried to create this program but have come across MANY issues. Please help!
Code without Functions-
# Import database module
import MySQLdb
# Create connection to the MySQL database - Make sure host, user,
# passwd are consistent with the database you are trying to conect to
db_connection = MySQLdb.connect(host='localhost', user='root', passwd='password')
# Variable that exacutes Database calls with MySQL
cursor = db_connection.cursor()
# Create databse with MYSQL query - databasename
cursor.execute('CREATE DATABASE inb104')
# Select which database to use with MYSQL query - databasename
cursor.execute('USE inb104')
# Create database with MYSQL query - tablename & fields
cursor.execute('''CREATE TABLE popularity (
PersonNumber INT,
Value VARCHAR(70),
Category VARCHAR(25),
PRIMARY KEY (PersonNumber, Value, Category)
)
''')
cursor.execute("LOAD DATA LOCAL INFILE 'tv.txt' INTO TABLE popularity FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n' (PersonNumber, Value, Category) SET Category='TV'")
cursor.execute("LOAD DATA LOCAL INFILE 'actors.txt' INTO TABLE popularity FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n' (PersonNumber, Value, Category) SET Category='Actors'")
cursor.execute("LOAD DATA LOCAL INFILE 'movies.txt' INTO TABLE popularity FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n' (PersonNumber, Value, Category) SET Category='Movies'")
cursor.execute("LOAD DATA LOCAL INFILE 'sports.txt' INTO TABLE popularity FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n' (PersonNumber, Value, Category) SET Category='Sports'")
cursor.execute("LOAD DATA LOCAL INFILE 'activities.txt' INTO TABLE popularity FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n' (PersonNumber, Value, Category) SET Category='Activities'")
cursor.execute("LOAD DATA LOCAL INFILE 'musicians.txt' INTO TABLE popularity FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n' (PersonNumber, Value, Category) SET Category='Musicians'")
cursor.execute("LOAD DATA LOCAL INFILE 'games.txt' INTO TABLE popularity FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n' (PersonNumber, Value, Category) SET Category='Games'")
cursor.execute("LOAD DATA LOCAL INFILE 'books.txt' INTO TABLE popularity FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n' (PersonNumber, Value, Category) SET Category='Books'")
# commit the changes to the database
db_connection.commit()
# close the cursor and connection
cursor.close()
db_connection.close()
This is the code with functions-
import MySQLdb
def connect_to_database(user, password):
return MySQLdb.connect(host='localhost', user=user, passwd=password)
def create_database(cursor):
cursor.execute('CREATE DATABASE inb104')
cursor.execute('USE inb104')
cursor.execute('''CREATE TABLE popularity (
PersonNumber INT,
Value VARCHAR(70),
Category VARCHAR(25),
PRIMARY KEY (PersonNumber, Value, Category)
)
''')
def load_file(cursor, *files):
"""Load the files given in (filename, category) format."""
sql = '''LOAD DATA LOCAL INFILE '%s' INTO TABLE popularity
FIELDS TERMINATED BY '\\t'
LINES TERMINATED BY '\\n'
(PersonNumber, Value, Category)
SET Category='%s'")
'''
for filename, category in files:
cursor.execute(sql, (filename, category))
def data_entry(self):
"""Connect to the DB server, create the DB and table and load the table with records
"""
db = connect_to_database('root', 'password')
cursor = db.cursor()
create_database(cursor)
load_file(cursor,('tv.txt', 'TV'), ('actors.txt', 'Actors'),
('movies.txt', 'Movies'))
db.commit()
cursor.close()
db.close()
The code with functions comes up with these errors:
Traceback (most recent call last):
File "C:\Users\Kim\Desktop\Archive\Project 8 - Data Entry\data_entry.py", line 108, in <module>
'activities', 'musicians', 'books'])
File "C:\Users\Kim\Desktop\Archive\Project 8 - Data Entry\data_entry.py", line 88, in data_entry
('movies.txt', 'Movies'))
File "C:\Users\Kim\Desktop\Archive\Project 8 - Data Entry\data_entry.py", line 78, in load_file
cursor.execute(sql, (filename, category))
File "C:\Python25\Lib\site-packages\MySQLdb\cursors.py", line 166, in execute
self.errorhandler(self, exc, value)
File "C:\Python25\Lib\site-packages\MySQLdb\connections.py", line 35, in defaulterrorhandler
raise errorclass, errorvalue
ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'tv.txt'' INTO TABLE popularity \n FIELDS TERMINATED BY '\\t' \n ' at line 1")
Please help!