我们要读取CSV文件的内容,并且要把数据存入数据库
首先与数据库建立连接
port是数据库端口一般3306,user是创建数据库的用户名,password是数据库连接密码,db数据库名称
#建立连接
conn = pymysql.connect(host='localhost', port=3306, user='***', password='****', db = db_name, charset='utf8')
#建立游标对象
cursor = conn.cursor()
读取csv文件的内容
url是你本地csv文件的路径,注意如果路径带中文名不要直接pd.read_csv(“url”),会报错
#调用pandas,获得.csv文件
f = open('url')
df = pd.read_csv(f)
之后就循环遍历每条数据,并且插入数据库
每条数据单独添加,故需要每次重写sql语句
for each in df.values:
#每条数据应该单独添加,故需要重写sql语句
sql = 'insert into ' + table_name + ' values('
for i,n in enumerate(each):
if i < (len(each) - 1):
sql = sql + str(n) + ','
else:
sql = sql + str(n) + ')'
sql = sql + ';'
#print(sql)
#一条sql语句生成,提交执行
cursor.execute(sql)
conn.commit()
踩过的坑
1、建立连接,数据库一定要存在,名称一定要对,否则报错database不存在
2、pandas读取.csv文件,但是文件路径有中文,故需要用以下方式读取,若直接 df = pd.read_csv(‘url’)会报错,巴拉巴拉一大堆
f = open(‘url’)
df = pd.read_csv(f)
3、数据库中要先创建好表table,并且存放格式一定要和table表中的格式对应
完整代码
import pymysql
import pandas as pd
def get_con(db_name):
#建立连接
conn = pymysql.connect(host='localhost', port=3306, user='***', password='***', db = db_name, charset='utf8')
#建立游标对象
cursor = conn.cursor()
return conn, cursor
def insert_Data(db_name, table_name):
#调用get_con返回conn, cursor
conn, cursor = get_con(db_name)
#调用pandas,获得.csv文件
f = open('url')
df = pd.read_csv(f)
#循环遍历df,获取每一条数据
#count记录数据条数
count = 0
for each in df.values:
#每条数据应该单独添加,故需要重写sql语句
sql = 'insert into ' + table_name + ' values('
for i,n in enumerate(each):
if i < (len(each) - 1):
sql = sql + str(n) + ','
else:
sql = sql + str(n) + ')'
sql = sql + ';'
#print(sql)
#一条sql语句生成,提交执行
cursor.execute(sql)
conn.commit()
#每提交一次,count加一
count = count + 1
print(str(count) + '条数据提交成功!')
return conn, cursor
def main(db_name, table_name):
conn, cursor = insert_Data(db_name, table_name)
conn.close()
cursor.close()
if __name__ == '__main__':
main('map_data', 'pipedatas')
附数据库增删改查操作命令
数据库基本操作:增删改查
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ —like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1