发布时间:2023-07-28 08:30
一、text文件插入到数据库
代码新建库、表、再插入
代码如下:
import pandas as pd
import sqlalchemy as sq
import pymysql
import warnings
warnings.filterwarnings("ignore") # 利用过滤器来实现忽略告警
DataBaseName='co2' #要创建的数据库
tb_name = 'wlg' ###要创建的数据表
path = r'E:\test\WLG.txt' # 指定一个站点数据文件
try:
conn = pymysql.connect(host='localhost',
user='root',
password='root',
) #db='airstropatm' 这个可以放在前面的括号里面,同时把后面的第二、三行删除即可,就是直接选择数据库,不用创建数据库
cursor = conn.cursor()
cursor.execute('CREATE DATABASE IF NOT EXISTS ' + DataBaseName + ' CHARACTER SET=utf8mb4')
conn.select_db(DataBaseName)
print('数据库连接成功!')
except Exception as e:
print('数据库连接失败!', e)
try:
sql_createTb = """CREATE TABLE %s""" %tb_name + """(
id mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
dateYMD date DEFAULT NULL,
value float DEFAULT NULL,
PRIMARY KEY(id));
"""
cursor.execute(sql_createTb)
conn.commit()
print('创建成功')
except Exception as e:
conn.rollback()
print('创建失败', e)
finally:
cursor.close()
conn.close()
con = sq.create_engine('mysql+pymysql://root:root@localhost/co2') # 连接mysql数据库
df = pd.read_csv(path, sep='\s+', header=None, skiprows=0, engine='python')# 连接mysql数据库,150是跳过的行号
df['dateYMD'] = df[1].map(str) +'-'+ \
df[2].map(lambda x: str(x).zfill(2))+'-'+ \
df[2].map(lambda x: str(x).zfill(2))
# 上面是数据的第一列至第三列连接成日期。
#print(df['dateYMD'])
#df['dateYMD'] = df[0] # 数据的第0列 。
df['value'] = df[3] # 数据的第6列 。
#print(df[3])
dobson_df = df[['dateYMD', 'value' ]]
#print(dobson_df)
dobson_df.drop(dobson_df.loc[dobson_df['value'] < 0].index, inplace=True) # 删除无效值
dobson_df.to_sql(tb_name, con, if_exists='append', index=False)
最终插入的表格样子
二、用python链接数据库,并且取指定库的指定表的全部数据,然后自行绘图
代码如下:
import pymysql
import matplotlib.pyplot as plt
def selectSQL():
# 这里设置的是本地数据库的账户的信息,根据情况来修改参数
db = pymysql.connect(host="localhost" ,
user="root" ,
password="1234",
db="co2" ,
charset='utf8',
)
cursor = db.cursor()
try:
# from 后边是要操作的数据表
sql = "SELECT * FROM wlg"
cursor.execute(sql)
data = cursor.fetchall()
# data里边就是信息,是一个二维列表,print 一下就知道了
return data
except :
print("selsct Error")
db.close()
def draw(data):
name_list = []
data_list = []
i = 0
#data的信息是表里边全部的信息,根据需要取即可
for item in data:
# item 就是表内一行数据,用下标读取第几列即可,从 0 开始
name_list.append(item[1])
data_list.append(item[2])
print(name_list)
print(data_list)
plt.plot(name_list, data_list,marker='.',color='r')
plt.title('CO2')
plt.xlabel('year')
plt.ylabel('CO2(mg/L)')
plt.tick_params(direction='in') # 刻度向里
plt.show()
def main():
# 先查出数据,然后再绘图
draw(selectSQL())
if __name__ == "__main__":
main()
最终绘图样子: