python读取数据库数据 详解Python如何读取MySQL数据库表数据
本篇文章给大家谈谈python读取数据库数据,以及详解Python如何读取MySQL数据库表数据对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
详解Python如何读取MySQL数据库表数据
这篇文章主要为大家详解Python如何读取MySQL数据库表数据,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了Python读取MySQL数据库表数据的具体代码,供大家参考,具体内容如下
环境:Python 3.6,Window 64bit
目的:从MySQL数据库读取目标表数据,并处理
代码:
#-*- coding: utf-8-*-
import pandas as pd
import pymysql
##加上字符集参数,防止中文乱码
dbconn=pymysql.connect(
host="**********",
database="kimbo",
user="kimbo_test",
password="******",
port=3306,
charset='utf8'
)
#sql语句
sqlcmd="select col_name,col_type,col_desc from itf_datadic_dtl_d limit 10"
#利用pandas模块导入mysql数据
a=pd.read_sql(sqlcmd,dbconn)
#取前5行数据
b=a.head()
print(b)
#读取csv数据
# pd.read_csv()
#读取excel数据
#pd.read_excel()
#读取txt数据
#pd.read_table()结果如图:
python如何实现xml与数据库读取转换的示例代码分享
这篇文章主要给大家介绍了关于利用python实现xml与数据库读取转换的方法,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
前言
xml课的第三第四个作业都是用java编程来实现xml dom的一些转换,因为自己没怎么学过java,因此和老师说了下想用python来实现第三第四个作业,下面就直接贴代码了
xml文档
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" rel="external nofollow" href="1.xslt" rel="external nofollow"?>
<!DOCTYPE sys_info [
<!ELEMENT sys_info(info+)>
<!ELEMENT info(sysDescr,sysUpTime,sysContact,sysName)>
<!ELEMENT sysDescr(#PCDATA)>
<!ELEMENT sysUpTime(#PCDATA)>
<!ELEMENT sysContact(#PCDATA)>
<!ELEMENT sysName(#PCDATA)>
<!ATTLIST info ip CDATA#REQUIRED>
]>
<sys_info xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="1.xsd">
<info ip="192.168.1.1">
<sysDescr>X86-Windows2000</sysDescr>
<sysUpTime>9 hours 42 minutes</sysUpTime>
<sysContact>zhangsan</sysContact>
<sysName>computerZhang</sysName>
</info>
<info ip="192.168.1.3">
<sysDescr>router</sysDescr>
<sysUpTime>24 hours</sysUpTime>
<sysContact>ruijie</sysContact>
<sysName>Router2</sysName>
</info>
<info ip="192.168.2.1">
<sysDescr>router</sysDescr>
<sysUpTime>89 hours</sysUpTime>
<sysContact>Cisco</sysContact>
<sysName>Router3</sysName>
</info>
</sys_info>解析xml文档用的是python自带的xml库ElementTree,读取mysql可以安装MySQLdb模块
apt-get install python-MySQLdb程序运行如下
root@lj/h/s/x/3# python 21.py-h
usage: 21.py [-h] status
positional arguments:
status 0clar,1read,2insert读取xml保存到数据库
root@lj/h/s/x/3# python 21.py 2
插入语句: insert into info values('192.168.1.1','X86-Windows2000','9 hours 42 minutes','zhangsan','computerZhang')
插入语句: insert into info values('192.168.1.3','router','24 hours','ruijie','Router2')
插入语句: insert into info values('192.168.2.1','router','89 hours','Cisco','Router3')
insert success!!!读取数据库保存到xml文档
root@lj/h/s/x/3# python 21.py 1
+-------------+-----------------+--------------------+------------+---------------+
| IP地址| sysDescr.0| sysUpTime.0| sysContact| sysName.0|
+-------------+-----------------+--------------------+------------+---------------+
| 192.168.1.1| X86-Windows2000| 9 hours 42 minutes| zhangsan| computerZhang|
| 192.168.1.3| router| 24 hours| ruijie| Router2|
| 192.168.2.1| router| 89 hours| Cisco| Router3|
+-------------+-----------------+--------------------+------------+---------------+
write into sys.xml...建立数据库的sql文件:
-- MySQL dump 10.16 Distrib 10.1.21-MariaDB, for debian-linux-gnu(x86_64)
--
-- Host: localhost Database: localhost
--------------------------------------------------------
-- Server version 10.1.21-MariaDB-5
/*!40101 SET@OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT*/;
/*!40101 SET@OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS*/;
/*!40101 SET@OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION*/;
/*!40101 SET NAMES utf8mb4*/;
/*!40103 SET@OLD_TIME_ZONE=@@TIME_ZONE*/;
/*!40103 SET TIME_ZONE='+00:00'*/;
/*!40014 SET@OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0*/;
/*!40014 SET@OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0*/;
/*!40101 SET@OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO'*/;
/*!40111 SET@OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0*/;
--
-- Table structure for table `info`
--
DROP TABLE IF EXISTS `info`;
/*!40101 SET@saved_cs_client=@@character_set_client*/;
/*!40101 SET character_set_client= utf8*/;
CREATE TABLE `info`(
`ip` char(15) NOT NULL,
`sysDescr` varchar(20) DEFAULT NULL,
`sysUpTime` varchar(40) DEFAULT NULL,
`sysContract` varchar(20) DEFAULT NULL,
`sysName` varchar(20) DEFAULT NULL,
PRIMARY KEY(`ip`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client=@saved_cs_client*/;
--
-- Dumping data for table `info`
--
LOCK TABLES `info` WRITE;
/*!40000 ALTER TABLE `info` DISABLE KEYS*/;
INSERT INTO `info` VALUES('192.168.1.1','X86-Windows2000','9 hours 42 minutes','zhangsan','computerZhang'),('192.168.1.3','router','24 hours','ruijie','Router2'),('192.168.2.1','router','89 hours','Cisco','Router3');
/*!40000 ALTER TABLE `info` ENABLE KEYS*/;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE*/;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE*/;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS*/;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS*/;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT*/;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS*/;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION*/;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES*/;
-- Dump completed on 2017-03-23 15:36:31下面是主要代码
#!/usr/bin/env python
#-*- coding: utf-8-*-
#@Date: 2017-03-23 14:47:39
#@Author:江sir(2461805286@qq.com)
#@Link: http://www.blogsir.com.cn
#@Version:$1.1
import sys
import xml.etree.ElementTree as ET
import MySQLdb
import argparse
from prettytable import PrettyTable
'''
一个xml作业,自己用python实现了从xml读取到数据库,和从数据库读取到xml的功能
'''
def buildNewsXmlFile(data):
root= ET.Element('sys_info')#创建sys_info根元素
# print help(ET)
info= ET.SubElement(root,"info",attrib={'ip':'%s'%data[0][0]})#创建四个二级元素
sysDescr= ET.SubElement(info,"sysDescr")
sysUpTime= ET.SubElement(info,"sysUpTime")
sysContact= ET.SubElement(info,"sysContact")
sysName= ET.SubElement(info,"sysName")
sysDescr.text= data[0][1]
sysUpTime.text= data[0][2]
sysContact.text= data[0][3]
sysName.text= data[0][4]
info= ET.SubElement(root,"info",attrib={'ip':'%s'%data[1][0]})
sysDescr= ET.SubElement(info,"sysDescr")
sysUpTime= ET.SubElement(info,"sysUpTime")
sysContact= ET.SubElement(info,"sysContact")
sysName= ET.SubElement(info,"sysName")
sysDescr.text= data[1][1]
sysUpTime.text= data[1][2]
sysContact.text= data[1][3]
sysName.text= data[1][4]
info= ET.SubElement(root,"info",attrib={'ip':'%s'%data[2][0]})
sysDescr= ET.SubElement(info,"sysDescr")
sysUpTime= ET.SubElement(info,"sysUpTime")
sysContact= ET.SubElement(info,"sysContact")
sysName= ET.SubElement(info,"sysName")
sysDescr.text= data[2][1]
sysUpTime.text= data[2][2]
sysContact.text= data[2][3]
sysName.text= data[2][4]
print'write into sys.xml...'
tree= ET.ElementTree(root)
tree.write("sys.xml")
def xml_parser():
data={}
data_list= []
tree= ET.parse('21.xml')
root= tree.getroot()#获取根元素
for info in root.findall('info'):#查找所有info元素
for child in info:#对每个info元素遍历属性和子节点
data ['ip']= info.attrib['ip']
data[child.tag]= child.text
# print data.values()
data_list.append(data.values())
# print data_list
return data_list
def get_Mysql():
conn= MySQLdb.connect('localhost','root','root','sys_info2',charset='utf8')
cursor= conn.cursor()
cursor.execute('select* from info');
result= cursor.fetchall()
if not result:
print'please insert the database first'
sys.exit()
x= PrettyTable(['IP地址','sysDescr.0','sysUpTime.0','sysContact','sysName.0'])
for i in result:
x.add_row(i)
print x
# print result
return result
def set_Mysql(data):
conn= MySQLdb.connect('localhost','root','root','sys_info2',charset='utf8')
cursor= conn.cursor()
for i in data:
# print tuple(i)
sysName,ip,sysUpTime,sysDescr,sysContact= tuple(i)
sql="insert into info values('%s','%s','%s','%s','%s')"%(ip,sysDescr,sysUpTime,sysContact,sysName)
print'插入语句:',sql
try:
cursor.execute(sql)
except:
print'please clear the database'
sys.exit()
print'insert success!!!'
conn.commit()
conn.close()
def clear_Mysql():
conn= MySQLdb.connect('localhost','root','root','sys_info2',charset='utf8')
cursor= conn.cursor()
cursor.execute('delete from info')
conn.commit()
conn.close()
def main():
parser= argparse.ArgumentParser()
parser.add_argument('status',type=int,help="0clar,1read,2insert")
arg= parser.parse_args()
# print arg
status= arg.status
if status== 1:
data= get_Mysql()
buildNewsXmlFile(data)
elif status== 2:
data= xml_parser()
python如何访问数据库
1.背景:
python提供了很多数据库接口,常用的数据库有 MS SQL Server/mysql/oracle等。
打开链接 https://wiki.python.org/moin/DatabaseInterfaces
是python关于数据库接口的一个总结,可以看到python支持的访问的数据库系统。
2.模块:
python主要是通过模块和数据库连接的。
2.1安装模块:
如果使用anconda,本身就会集合很多模块,不需要手动安装。如果用pycharm就要手动安装模块。
安装模块流程:
下载模块扩展包放到路径下——>cmd找到相应路径——> pip install+扩展包名字
下面列举一些常用连接数据库的模块:pymssql/ sqlite3/ PyMySQL/pyodbc/odbc/adodbapi
不同模块连接的数据库不同,支持的版本系统有的也不一样。但是大体用法都是相近的,因为有DB-API
相关推荐:《Python教程》
3.Python DB-API
3.1背景:
在没有DB-API之前,不同数据库有不同的数据库接口程序,这就导致python访问 database的接口程序非常混乱。如果我们学习了python访问 mysql的接口程序,然后要切换到另一个数据库上,我们还要在学习另外一个数据库的接口程序。python DB-API就是为了解决接口程序混乱而生成的。有了DB-API,在不同数据库上移植代码就变得简单的多了。
3.2Python DB-API:
Python定义了一套操作数据库的 DB-API接口,它是一个规范,定义了一系列必须的对象和数据库存取方式,以便为不同的底层数据库系统提供一致的访问接口
这个链接就是python官方给定的 DB-API的说明 https://www.python.org/dev/peps/pep-0249/
3.3 Python DB--API的内容:
连接对象:
?Connect()创建连接:host/server/user/password/db connect方法生成一个connect对象,我们通过这个对象来访问数据库。符合标准的模块都会实现connect方法。
?close():关闭连接
?commit():提交当前事务。做出某些更改后确保已经进行了提交,这样才可以将这些修改真正地保存到database中
?rollback()回滚上一次调用 commit()以来对数据库所做的更改
?cursor():创建游标。系统为用户开通的一个数据缓冲区,用于存放SQL语句执行结果。cursor游标是有状态的,它可以记录当前已经取到结果的第几个记录了,因此,一般你只可以遍历结果集一次。在上面的情况下,如果执行fetchone()会返回为空。这一点在测试时需要注意
游标对象:
?Execute()执行一个数据库查询或命令。 execute执行sql语句之后运行的结果不会直接output出来,而是放到了一个缓存区,要用 fetch语句+print可以查询sql运行的结果
?fetchone()得到结果集的下一行
?fetchmany(size)得到结果集的下几行
?fetchall()返回结果集中剩下的所有行
?rowcount返回影响的行数
?Close()关闭游标对象
3.4Python DB--API的工作原理及流程:
如图所示如果把python和数据库比作两个不同的地点, connection就是路,能连接python和database。cursor就像在路上行驶的小货车,可以用于执行sql语句,以及存储sql运行的结果。
流程:
4.MS SQL Server示例:
4.1导入模块、创建连接:
4.2创建游标:游标创建之后就可以对数据库进行查询更改了!
4.3对数据进行操作(创建表、插入行、更新数据、增加列、删除行、列、表):
4.4查询获取行:
5.其他:
使用游标的时候要注意,每次连接只能有一个游标查询处于活跃状态。 code演示:
execute()循环和 executemany()插入100000条数据测速:
关于python读取数据库数据到此分享完毕,希望能帮助到您。