python读取数据库数据类型_Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】...

本文实例讲述了Python实现从SQL型数据库读写dataframe型数据的方法。分享给大家供大家参考,具体如下:

Python的pandas包对表格化的数据处理能力很强,而SQL数据库的数据就是以表格的形式储存,因此经常将sql数据库里的数据直接读取为dataframe,分析操作以后再将dataframe存到sql数据库中。而pandas中的read_sql和to_sql函数就可以很方便得从sql数据库中读写数据。

参见pandas.read_sql的文档,read_sql主要有如下几个参数:

sql:SQL命令字符串

con:连接sql数据库的engine,一般可以用SQLalchemy或者pymysql之类的包建立

index_col: 选择某一列作为index

coerce_float:非常有用,将数字形式的字符串直接以float型读入

parse_dates:将某一列日期型字符串转换为datetime型数据,与pd.to_datetime函数功能类似。可以直接提供需要转换的列名以默认的日期形式转换,也可以用字典的格式提供列名和转换的日期格式,比如{column_name: format string}(format string:"%Y:%m:%H:%M:%S")。

columns:要选取的列。一般没啥用,因为在sql命令里面一般就指定要选择的列了

chunksize:如果提供了一个整数值,那么就会返回一个generator,每次输出的行数就是提供的值的大小。

params:其他的一些执行参数,没用过不太清楚。。。

以链接常见的mysql数据库为例:

import pandas as pd

import pymysql

import sqlalchemy

from sqlalchemy import create_engine

# 1. 用sqlalchemy构建数据库链接engine

connect_info = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(DB_USER, DB_PASS, DB_HOST, DB_PORT, DATABASE) #1

engine = create_engine(connect_info)

# sql 命令

sql_cmd = "SELECT * FROM table"

df = pd.read_sql(sql=sql_cmd, con=engine)

# 2. 用DBAPI构建数据库链接engine

con = pymysql.connect(host=localhost, user=username, password=password, database=dbname, charset='utf8', use_unicode=True)

df = pd.read_sql(sql_cmd, con)

解释一下 #1: 这个是sqlalchemy中链接数据库的URL格式:dialect[+driver]://user:password@host/dbname[?key=value..]。dialect代表书库局类型,比如mysql, oracle, postgresql。driver代表DBAPI的名字,比如psycopg2,pymysql等。具体说明可以参考这里。此外由于数据里面有中文的时候就需要将charset设为utf8。

参见pandas.to_sql函数,主要有以下几个参数:

name: 输出的表名

con: 与read_sql中相同

if_exits: 三个模式:fail,若表存在,则不输出;replace:若表存在,覆盖原来表里的数据;append:若表存在,将数据写到原表的后面。默认为fail

index:是否将df的index单独写到一列中

index_label:指定列作为df的index输出,此时index为True

chunksize: 同read_sql

dtype: 指定列的输出到数据库中的数据类型。字典形式储存:{column_name: sql_dtype}。常见的数据类型有sqlalchemy.types.INTEGER(), sqlalchemy.types.NVARCHAR(),sqlalchemy.Datetime()等,具体数据类型可以参考这里

还是以写到mysql数据库为例:

df.to_sql(name='table',

con=con,

if_exists='append',

index=False,

dtype={'col1':sqlalchemy.types.INTEGER(),

'col2':sqlalchemy.types.NVARCHAR(length=255),

'col_time':sqlalchemy.DateTime(),

'col_bool':sqlalchemy.types.Boolean

})

注:如果不提供dtype,to_sql会自动根据df列的dtype选择默认的数据类型输出,比如字符型会以sqlalchemy.types.TEXT类型输出,相比NVARCHAR,TEXT类型的数据所占的空间更大,所以一般会指定输出为NVARCHAR;而如果df的列的类型为np.int64时,将会导致无法识别并转换成INTEGER型,需要事先转换成int类型(用map,apply函数可以方便的转换)。

参考:

http://docs.sqlalchemy.org/en/latest/core/type_basics.html#sql-standard-and-multiple-vendor-types

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_sql.html

http://docs.sqlalchemy.org/en/latest/core/engines.html

http://docs.sqlalchemy.org/en/latest/core/type_basics.html#sql-standard-and-multiple-vendor-types

http://stackoverflow.com/questions/30631325/writing-to-mysql-database-with-pandas-using-sqlalchemy-to-sql

http://stackoverflow.com/questions/5687718/how-can-i-insert-data-into-a-mysql-database

http://stackoverflow.com/questions/32235696/pandas-to-sql-gives-unicode-decode-error

http://stackoverflow.com/questions/34383000/pandas-to-sql-all-columns-as-nvarchar

希望本文所述对大家Python程序设计有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle客户端三种连接,客户端连接ORACLE的几种方法

一、HOSTNAME方法对于网络结构比较单一,Oracle服务器比较少的情况下,可以使用HOSTNAME方法。不过这种方法有几个限制:1、 必须使用TCP/IP协议2、 不能使用高级管理工具,比如Oracle Connection Manager3、 客户端必须有相应的扩展命…

swiper.js pagination指示点不变_电缆故障点的四种实用测定方法

一、电缆故障的种类与判断无论是高压电缆或低压电缆,在施工安装、运行过程中经常因短路、过负荷运行、绝缘老化或外力作用等原因造成故障。电缆故障可概括为接地、短路、断线三类,其故障类型主要有以下几方面:①三芯电缆一芯或两芯接地。②二…

oracle undo段的作用,Oracle数据库中Undo数据段的作用及类型

Undo数据段的作用:事务回滚(Transaction Rollback):程序执行rollback操作。事务修复(Transaction Recovery):rollback是recovery的一部分。读取一致(Read Consistency):根据SCN(system change number)来保证读取数据的一致性。Und…

wampserver php扩展openssl 不可用_PHP基础及WAMP集成基础

PHP语言编写的基础框架 PHP语言的编写框架与HTML5的一致&#xff0c;都是一下框架&#xff1a;<!DOCTYPE html> <html><head></head><body> </body> </html>PHP的主要表达语句在body里面&#xff0c;主题内容在<?p ?>标签中…

python expect模块_Python尚学堂高淇|第二季0408P119P123with上常见的异常的解决tryexcept...else结构,...

P119 04&#xff1a;try ...except...else结构try..except...else结构增加了"else快"如果try快当中没有抛出异常&#xff0c;则执行else快&#xff0c;如果try快当中抛出异常&#xff0c;则执行except快&#xff0c;不执行【实例】try....except...else结构执行测试…

oracle 31693,ORACLE expdp备份与ORA-31693、ORA-02354、ORA-01555

近期&#xff0c;某综合网管系统expdp备份出现异常&#xff0c;报错信息如下&#xff1a;Export: Release 10.2.0.4.0 - 64bit Production on 星期二, 12 4月, 2016 11:30:00Copyright (c) 2003, 2007, Oracle. All rights reserved.;;;连接到: Oracle Database 10g Enterpris…

用c语言简单办法做一个字典_幼儿园手工,用废纸筒做一个简单的小蝴蝶,有教程...

幼儿园的手工&#xff0c;除了用卡纸做各种简单的小制作外&#xff0c;纸筒也是常用的手工材料。下面用纸筒做一个简单的小蝴蝶&#xff0c;做法很简单。制作过程&#xff1a;准备材料废纸筒、剪刀、胶、水彩笔&#xff0c;纸板。在纸筒上剪下五个圈圈剪完的样子见下图把里面粘…

bing搜索引擎入口_互联网流量入口——头条的搜索计划

互联网时代&#xff0c;谁掌控了用户流量&#xff0c;那它就基本上胜出了一半&#xff1a;只有大量的用户和海量的数据才是信息化时代的主要要素。这些大数据信息和火热的深度学习算法的结合&#xff0c;能够催生无数的应用场景&#xff0c;通过不断的扩展和调整业务来保证自身…

jvm oracle sun,JVM - 常见的JVM种类

HotSpot VMHotSpot VM是绝对的主流。大家用它的时候很可能就没想过还有别的选择&#xff0c;或者是为了迁就依赖了Oracle/Sun JDK某些具体实现的烂代码而选择用HotSpot VM省点心。Oracle / Sun JDK、OpenJDK的各种变种(例如IcedTea、Zulu)&#xff0c;用的都是相同核心的HotSpo…

python单链表实现具体例子_Python实现数据结构线性链表(单链表)算法示例

本文实例讲述了Python实现数据结构线性链表&#xff08;单链表&#xff09;算法。分享给大家供大家参考&#xff0c;具体如下&#xff1a; 初学python&#xff0c;拿数据结构中的线性链表存储结构练练手&#xff0c;理论比较简单&#xff0c;直接上代码。 #!/usr/bin/python # …

oracle conneciton properties,在WAS Liberty连接池中,我可以验证借用连接吗?

我们当前正在将应用程序迁移到Liberty服务器(8.5.5.9)上运行。我们发现应用程序服务器和数据库之间的连接偶尔会被防火墙终止&#xff0c;因为它们会在很长一段时间内处于空闲状态。发生这种情况时&#xff0c;在下一个HTTP请求中&#xff0c;应用程序将收到其中一个断开的连接…

python图形化编程工具哪个好_mPython(图形化编程软件) V0.5.0 官方版

mPython 是一款针对Python 3编程语言的图形化编辑工具。支持函数&#xff0c;仿真、hex、python、blockly三种代码读写等功能。并可以与TPYBoard系类开发板配合使用&#xff0c;直接连接PC端进行编程。【功能特点】 1、不依赖网络&#xff0c;可离线安装使用 2、支持hex、pytho…

python三种变量方式_python2.x 3种变量形式调用

python 变量使用raw_input 2.x input 3.x第一种name input("name:")age input("age:")job input("job:")info ----------info - %s ----------Name: %sAge: %sJob: %s% (name,name,age,job)print (info)第二种name input("name:"…

linux更新系统内核,如何更新Linux内核来提升系统性能?

Linux内核的开发速度是前所未有的&#xff0c;大概每二三个月就会有一个新的主要版本发布。每次发布都带来了几项新的功能和改进&#xff0c;许多人可以充分利用它们&#xff0c;让计算体验更快、更高效或者有其他方面的提升。可问题是&#xff0c;你通常无法充分利用这些刚发布…

php对接V免签支付教程_【全网首发】最新版影视小程序搭建教程完整版

大家好&#xff0c;这里是深海网络&#xff0c;今天给大家讲解一下新版影视小程序搭建。  首先给大家看一下新版影视小程序是什么样子的&#xff0c;它有黑夜和白天两种观影模式&#xff0c;而且搜索精准&#xff0c;播放速度快。01第一步&#xff0c;开始正式搭建。新版区小…

linux编译代码命令,Linux下使用GCC命令编译代码

Linux下初学时最好从命令行入手&#xff0c;这样可以熟悉从编写程序、编译、调试和执行的整个过程。编写程序可以用vi/vim(个人觉得vim比vi好用)或其它编辑器编写。编译则使用gcc命令。要往下学习首先就得熟悉gcc命令的用法。gcc命令提供了非常多的命令选项&#xff0c;但并不是…

简要描述内部连接和外部连接之间的区别_sqlserver的几种常见连接方法

感谢本文几种描述方法&#xff0c;让我解决了最近的一段时间的疑问&#xff0c;转载下来&#xff0c;以供后面查血使用。本文链接&#xff1a;https://blog.csdn.net/huanghanqian/article/details/52847835四种join的区别已老生常谈&#xff1a;INNER JOIN(也可简写为JOIN): 如…

有两个python怎么停用其中一_python3.X 复学(2)-----开始了就不要停止

生命就是一种旅行&#xff0c;开始了就不要停止&#xff0c;无非就是眼前的苟且还有以后的苟且&#xff0c;只要还有一口气 ----------hashlinux 因为Python是跨平台的&#xff0c;它可以运行在Windows、Mac和各种Linux/Unix系统上。在Windows上写Python程序&#xff0c;放到Li…

react项目中的参数解构_一天入门React学习心得

一天入门React学习心得阅读前必读本文写的仓促&#xff0c;算是一个学习笔记吧&#xff0c;算是一个入门级的学习文章。如果你刚刚入门&#xff0c;那么可能一些入门的视频可能更加适合你。但如果具备一些知识&#xff0c;比如Vue&#xff0c;那么视频就不适合了。建议看完本篇…

python random函数_详细代码实战讲解:如何用 Python让自己变成天选之子

今天为大家带来的内容是&#xff1a;详细代码讲解&#xff1a;如何用 Python让自己变成天选之子话不多说直接上代码&#xff1a;请大家猜一猜下面这段代码的运行效果&#xff1a;你是不是以为这段代码运行以后&#xff0c;结果如下图所示&#xff1f;但实际上&#xff0c;我可以…