【Python】MySQLdb库的使用以及格式化输出字段中的值

news/2024/11/19 23:40:57/

一.项目简单介绍

我们获取字段的内容方式有很多种,但基本都要ctrl+c(复制)ctrl+v粘贴,然后还有手动去更改

而以python作为处理工具将会快很多,本项目需要安装的库:MySQLdb,pandas,numpy

比如我们想要在每个不同的值加上"" 而复制的数据为下图

那么我们每次都要在每行字段之间加上""和,非常的麻烦,那么如何处理这种将他转换为字符串列表的形式,并将列表属性去掉.

二.内容加符号格式化输出解决方案

1.导入库,as后面为别名

import MySQLdb
import pandas as pd
import numpy as np

2.pandas读取文件数据:

 E:/py/txt/var.txt为我存放数据内容的表,其内容为sql中提取表中品牌字段中不同的值,原表为京东手机一年的销售数据:

# 导入文件,并设置index_col=None,
df = pd.read_csv('E:/py/txt/var.txt', index_col=None, engine='python', names=['品牌'])
print(df)

此时数据类型为DataFrame,为二维表

其中属性index_col值有三种,整数型,序列,布尔(默认为None)

index_col=None 列为index的值,即列使用默认索引 0 1 2 3....

index_col=0 第一列为index值,即此时第一列内容作为索引

运行结果如下:

        品牌
0     vivo
1       荣耀
2       小米
3    Apple
4       纽曼
5       华为
6   realme
7     oppo
8       三星
9      努比亚
10     一加 
11      魅族
12    摩托罗拉
13      其它
14      酷派
15      朵唯
16     诺基亚
17     中兴 
18    飞利浦 
19     尼凯恩
20      天语
21      酷比
22      糖果
23      金立
24   nzone
25      黑鲨

# 将DataFrame格式转换为数组
array = np.array(df)

3.循环遍历输出并格式化输出

range(1, 26)若超出此范围会报错提示超出索引范围,但是不影响运行结果

IndexError: index 26 is out of bounds for axis 0 with size 26

for i in range(1, 26):s = df[i-1:i]array[i] = np.array(s)print(f"%c{str(*array[i])}%c," % (34, 34))

其中s=df[i-1:i]为循环输出df中每一条数据,类似series的索引输出

array[i] = np.array(s),将数据循环转换为数组并赋值

%c为格式化输出字符 并以ASCII码值为34的输出 % (34,34)

以列表形式输出:

# 数组转列表
a_list = array.tolist()
print(a_list)

[['vivo'], ['vivo'], ['荣耀'], ['小米'], ['Apple'], ['纽曼'], ['华为'], ['realme'], ['oppo'], ['三星'], ['努比亚'], ['一加 '], ['魅族'], ['摩托罗拉'], ['其它'], ['酷派'], ['朵唯'], ['诺基亚'], ['中兴 '], ['飞利浦 '], ['尼凯恩'], ['天语'], ['酷比'], ['糖果'], ['金立'], ['nzone']]

三.Mysqldb库解决数据库提取数据复杂的问题

1.要有相关库,上面已经提到了

2.以下为数据库输出代码

# 打开数据库连接
db = MySQLdb.connect("localhost", "root", "489000", "test", charset='utf8')
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 使用execute方法执行SQL语句
cursor.execute("SELECT VERSION()")
# 使用 fetchone() 方法获取一条数据
version = cursor.fetchone()
print("Database version : %s " % version)
# 循环下标
# Sql预处理语句分组并查询各个品牌
sql = """SELECT 品牌 FROM SHEET1 \GROUP BY 品牌 """
cursor.execute(sql)
for i in range(1, 10000):data = cursor.fetchone()if data is None:breakelse:print(*data)  # 解包输出
# 关闭数据库连接
db.close()

3.循环时为了确保读数完整range范围可以设置大一些,然后在此基础上添加判断条件,

将循环游标读入的数据赋值给data,如果此种为None则终止循环,即再无数据可读,就终止循环并输出,为了保证输出格式为纯数据用*data解包此变量

四.整个过程完整代码及比对:

# _*_ coding:utf-8 _*_
# @Time    : 2022/9/1 9:30
# @Author  : ice_Seattle
# @File    : testprogram.py
# @Software: PyCharmimport MySQLdb
import pandas as pd
import numpy as np
# 打开数据库连接
db = MySQLdb.connect("localhost", "root", "489000", "test", charset='utf8')
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 使用execute方法执行SQL语句
cursor.execute("SELECT VERSION()")
# 使用 fetchone() 方法获取一条数据
version = cursor.fetchone()
print("Database version : %s " % version)
# 循环下标
# Sql预处理语句分组并查询各个品牌
sql = """SELECT 品牌 FROM SHEET1 \GROUP BY 品牌 """
cursor.execute(sql)
for i in range(1, 10000):data = cursor.fetchone()if data is None:breakelse:print(*data)  # 解包输出
# 关闭数据库连接
db.close()
# 导入文件,并设置index_col=None,
df = pd.read_csv('E:/py/txt/var.txt', index_col=None, engine='python', names=['品牌'])
# 将DataFrame格式转换为数组
array = np.array(df)
for i in range(1, 26):s = df[i-1:i]array[i] = np.array(s)print(f"%c{str(*array[i])}%c," % (34, 34))
# 数组转列表
a_list = array.tolist()
print(a_list)

Navicat 运行 SELECT 品牌,count(品牌) from sheet1 group by 品牌结果如下:

 Kettle中spoon.bat运行程序test结果如下

五.总结

 综上,若想提取字段中不同的内容:写好python代码之间运行后要比Navicat和Kettle快的多,且可以加上" "号用于列表等其它的数据转换,减少了复杂的操作步骤.


http://www.ppmy.cn/news/286584.html

相关文章

固话号码认证有什么好处?固话号码认证有什么作用?

固话号码认证为企业提供号码认证服务,在来电时显示企业信息,可提高电话号码辨识度,防止错误标记,确保展现的企业信息与企业的手机终端、APP等多平台展示信息一致,保证品牌企业的身份及商业价值。 那如何上线号码认证服…

虚拟号码认证如何开通?

近年来,经常会接到外卖、房产中介、信用贷款等电话,让顾客不胜其扰。现在电话标记功能使用越来越普遍,可以大概了解电话“来意”,同时也会让误标记、恶意标记很方便。对于开展业务或办公司或企业的人,更加不能让自己的…

ElasticSearch(四):DSL Query

ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL(Domain Specified Language) Query DSL是利用Rest API传递JSON格式的请求体(RequestBody)数据与ES进行交互,这种方式的丰富查询语法让ES检索变得更强大,更简洁 文…

如何以创新驱动增长战略

本文已获得伟大航路战略咨询(ID:wdhlzx)官方授权发表 为什么要创新 要明白为什么要创新的前提是先达成对“创新”的认知统一,俗语常说:“一千个人心中有一千个哈姆雷特”,创新却不是这样。 我们与混沌大学的创始人李善…

php 查找多维数组的值_php – 在多维数组中查找值

标签:php 我有一个多维数组: array ( array ( "username" > "foo", "favoriteGame" > "Mario" ) array ( "username" > "bar", "favoriteGame" > "Mario"…

性别歧视?华为、小米们为什么不做男性手机?

文|佘凯文 来源|智能相对论(aixdlun) 之前互联网流传着一张图片关于投资价值,其很好的解释了为何在各个领域包括手机,常见针对女性市场的单独开发,却少有针对男性市场的。 男性消费市场价值垫底,甚至不如…

【Android_CN_OAID】安卓设备唯一标识解决方案,可作为移动安全联盟统一 SDK (miit_mdid_xxx.aar)的替代方案。

Android_CN_OAID 安卓设备唯一标识解决方案,可作为移动安全联盟统一 SDK (miit_mdid_xxx.aar)的替代方案。本项目提供了国内各大手机厂商获取 OAID(开放匿名设备标识)及海外手机平台获取 AAID (安卓广告标…

得到头条【四线城市宜宾,靠什么逆袭?】

6月16日,2022世界动力电池大会举办了“云上宜宾”高端对话,清华大学的动力电池专家欧阳明高院士、宁德时代的首席科学家吴凯等业界大咖参加了这次对话。讨论的话题包括:西部地区怎样抓住新能源产业的新机遇,电池企业如何面对成本上…