今天领导提了一个需求,使用py将数据库中的文件提取出并制成csv文件
首先查了一下资料需要两个模块:csv模块、pymysql模块。
importpymysqlimport csv
使用def函数将从数据库提取数据写在一起(游标功能是数据库中一个非常重要的概念)
首先,使用pymysql连接上mysql数据库,得到一个数据库对象。
然后,我们必须要开启数据库中的游标功能,得到一个游标对象。
接着,使用游标对象中的execute()方法,去执行某个SQL语句,系统会根据你的SQL语句,找到这些匹配行,给你存储起来,而不是一次性的打印到频幕上。当你什么时候需要这个结果中的数据的时候,你就去获取它。
最后,就是获取结果集中的数据了,这里有两种方法获取结果集中的数据。一个是fetchone(),该方法一次获取一条记录,每一条记录是一个元组形式的数据,每获取一条记录游标会往前移动一格,等待获取下一条记录;一个是fetchall()方法,能够一次性的获取所有的数据,该方法返回的是一个元组列表。
当完成所有操作后,记得断开数据库的连接,释放资源。
def from_mysql_get_all_info():
conn = pymysql.connect( #连接数据库,创建一个数据库对象
host='127.0.0.1',
port=3306,
user='root',
passwd='root',
db='mysql',
charset='utf8')
cursor = conn.cursor() #开启游标功能,创建游标对象
sql = 'select * from user' #sql语句
cursor.execute(sql.encode('utf-8')) #使用execute()方法,执行SQL语句
data = cursor.fetchall() #cursor.fetchall()一次性获取所有数据 cursor.fetchone()一次性获取一个数据
for x in data:
print(x)
conn.close() #关闭数据库,释放资源
return data
#print(from_mysql_get_all_info())
从数据库中提取的资料写入一个csv文件中并保存在本地
文件操作的基础模式有三种(默认的操作模式为r模式):
r模式为read
w模式为write
a模式为append
文件读写内容的格式有两种(默认的读写内容的模式为b模式):
t模式为text
b模式为bytes
需要注意的是:t、b这两种模式均不能单独使用,都需要与r/w/a之一连用。
defwrite_csv():
data=from_mysql_get_all_info()
filename= 'corpus.csv' #文件名和路径
with open(filename, mode='w', encoding='utf-8') as f:
write= csv.writer(f, dialect='excel')for item indata:
write.writerow(item)
write_csv()
结果:在代码保存的文件夹中生成corpus.csv文件。里面包含数据库中的数据