用Python创建一个mySQL数据库的函数
我用Python和MySQL写了一个程序,这个程序可以创建一个数据库,并从文本文件中导入数据,把它们放到四个不同的列里。代码是能运行的,但我想改进一下,创建一些函数。
有没有人能帮我写一个创建MySQL数据库的函数?这是我现在的代码。非常感谢!
import MySQLdb
# Create connection to the MySQL database - Make sure host, user,
# passwd are consistent with the database you are trying to conect to
def create_database():
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()
好的,这是我目前的进展。
我遇到了这个错误:TypeError: data_entry() takes no arguments (1 given)
而且,数据也没有从文本文件插入到表格里。任何帮助都将非常感激!!
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():
"""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_files(cursor,('tv.txt', 'TV'), ('actors.txt', 'Actors'),
('movies.txt', 'Movies'))
db.commit()
cursor.close()
db.close()
1 个回答
0
你用来加载数据的SQL语句应该是:
sql = '''LOAD DATA LOCAL INFILE %s INTO TABLE popularity
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\\n'
(PersonNumber, Value, Category)
SET Category=%s
'''
+ %s --> '%s'
+ remove " at the end
这样应该就能正常工作了。还有,load_files 应该改成 load_file。