# -*- coding:UTF -8-*-import

osimport

pandas as pd#

检查是否有pymysql这个包存在import

pymysql#

SQLAlchemy本身无法操作数据库,其必须以来pymsql等第三方插件。from

sqlalchemy import create_engine,Sequence,textfrom

sqlalchemy.ext.declarative import declarative_basefrom

sqlalchemy import Column,

Integer,

String,

ForeignKey,

UniqueConstraint,

Indexfrom

sqlalchemy.orm import sessionmaker,

relationship#

设置工作路径os.chdir('E:

/data')#

读取文件sale

= pd.read_csv('sale.csv',encoding

= 'GB18030')'''

sale.csv:

year

market sale

profit

2010

东33912

2641

2010

南32246

2699

2010

西34792

2574

2010

北31884

2673

2011

东31651

2437

2011

南30572

2853

2011

西34175

2877

2011

北30555

2749

2012

东31619

2106

2012

南32443

3124

2012

西32103

2593

2012

北31744

2962

'''#

初始化数据连接数据库的信息host

= yourhostuser

= youridpassword

= yourpassworddb

= yourdatbasenameport

= 3306charset

= 'utf8'#

连接数据库#

pool_recycle控制任何连接的最大连接时长(秒);pool_size连接池的最大连接数,默认5,设置0时为无限制连接数连接;#

max_overflow溢出连接池的最大额外连接数,超过pool_size所设置的连接数的溢出连接数。实际上总的并行连接总数为pool_size

# +max_overflow,设置-1为不设置溢出最大限制,默认为10;pool_timeout等待返回信息时间,默认为30(秒)#

echo类似于python的logging(日志)功能,默认为False

# 'mysql+pymysql',mysql为数据库类型,pymysql为连接方式engine

= create_engine('mysql+pymysql://{user}:{password}@{host}:{port}/{db}?charset={charset}'

.format(user

= user,

host = host,

password = password,

db = db,port

= port,

charset = charset),

pool_size = 30,max_overflow

= 0)#

创建直接调用数据库属性conn

= engine.connect()#

查询数据库版本号#

execute里面为原始sql语句;#

fetchone为返回第一行结果;fetchall()为返回所有结果;fetchmany(n)为返回第n行结果databaseVersion

= conn.execute("SELECT

VERSION()").fetchone() # ##################使用原始sql语句运行#####################

# 创建一个数据表conn.execute('CREATE

TABLE sale ('

'year CHAR(20)

NOT NULL,'

'market CHAR(20),'

'sale INT ,'

'profit_from_sale INT )')#

删除表conn.execute('DROP

TABLE sale')#

将df存进数据表中且如果有同名数据表就把之前的删除后重新添加sale.to_sql('sale',conn,if_exists='replace',index

= False)#

查询数据表语句conn.execute('select

* from sale').fetchall()

conn.execute('select

DISTINCT year,market from sale').fetchall()

conn.execute("select

* from sale where year=2012 and market=%s",'东').fetchall()

conn.execute('select

year,market,sale,profit from sale order by sale').fetchall()#

添加数据记录conn.execute("insert

into sale (year,market,sale) value (2010,'东',33912)")#

删除数据记录conn.execute("delete

from sale") # #########################ORM模式############################

##创建表#

创建对象的基类Base

= declarative_base()#

在本地内存创建单表(建立本地与sql的连接)class

Sale(Base):

__tablename__ = 'sale'year

= Column(String(20),

primary_key=True,

nullable=False)

market = Column(String(10))

sale = Column(Integer)

profit_from_sale = Column(Integer)

# 测试用

def __repr__(self):

return '%s(%s,%s,%s,%s)'%\

(self.__tablename__,self.year,self.market,self.sale,self.profit_from_sale)

# 创建属性,UniqueConstraint为unique

key,Index为index

# __table_args__ = (

#

UniqueConstraint('id', 'name', name='uix_id_name'),

#

Index('ix_id_name', 'name', 'extra'),)'''

sale表在sql的DDL

CREATE TABLE `sale` (

`year`

varchar(20) NOT NULL,

`market`

varchar(10) DEFAULT NULL,

`sale`

int(11) DEFAULT NULL,

`profit_from_sale` int(11) DEFAULT NULL,

PRIMARY

KEY (`year`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

'''#

查询本地表的结构Sale.__table__ # 创建一对多表(建立本地与sql的连接)class

Favor(Base):

__tablename__ = 'favor'

nid = Column(Integer,

primary_key=True,

autoincrement=True)

caption = Column(String(50),

default='red',

unique=True)

sale_year = Column(String(10),

ForeignKey("sale.year"))'''

favor表在sql的DDL

CREATE TABLE `favor` (

`nid`

int(11) NOT NULL AUTO_INCREMENT,

`caption`

varchar(50) DEFAULT NULL,

`sale_year` varchar(10) DEFAULT NULL,

PRIMARY

KEY (`nid`),

UNIQUE

KEY `caption` (`caption`),

KEY

`sale_year` (`sale_year`),

CONSTRAINT `favor_ibfk_1` FOREIGN KEY (`sale_year`) REFERENCES

`sale` (`year`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

'''#

初始化数据库函数(全部)Base.metadata.create_all(conn)#

删除数据库(全部)Base.metadata.drop_all(conn) ##操作表#

创建session********************Session

= sessionmaker(bind=conn)

session = Session()#

新增单条数据new

= Sale(year=2010,

market='东',

sale=33912)

session.add(new)#

新增多条数据session.add_all([

Sale(year=2011,

market='东',

sale=31651,

profit_from_sale=2437),

Sale(year=2012,

market='东',

sale=31619),

])try:

# 提交即保存到数据库

session.commit()except:

# 回滚,返回session执行之前的状态

session.rollback()#

查询表(Querying)

# 返回的是list格式session.query(Sale.year,

Sale.sale).all()

# order_by以什么为顺序(默认升序)for

i in session.query(Sale).order_by(Sale.sale):

print(i.year,i.sale)

#first()为第一行,all()为全部for

i in session.query(Sale,Sale.year).all():

print(i.Sale,i.year)#

测试用

# label为设置替换名for

i in session.query(Sale.year.label('test')).all():

print(i.test)from

sqlalchemy.orm import aliased#

替换功能Sale_test

= aliased(Sale,

name='sale_test'

)#

name为table的名字for

i in session.query(Sale_test).all()[1:3]:

print(i)

# filter_by为匹配;filter也一样,用法为filter(Sale.year

= 2012),

# filter与filter之间用.连接,代表and的意思for

i in session.query(Sale).filter_by(year

= 2012).all():

print(i) # 使用text来混合原始sql语句使用session.query(Sale).filter(text('year>2010')).order_by(text('sale')).all()

session.query(Sale).filter(text('year=:year

and market=:market'))\

.params(year

= 2011,market

='东').order_by(Sale.sale).one()

session.query(Sale).from_statement(text('select

* from sale where year={}'.format(2012))).all() # Counting统计session.query(Sale.profit_from_sale).count()

# 统计行数,返回intfrom

sqlalchemy import func#

func 后可以跟任意函数名,只要该数据库支持session.query(func.count(Sale.profit_from_sale)).scalar()#

统计非nan值个数,返回intsession.query(func.count()).select_from(Sale).scalar()

session.query(Sale.profit_from_sale).distinct().count()#

统计不同的个数#

删除数据session.query(Sale).filter(Sale.year

== 2012).delete()

session.commit()#

修改数据(如果之前删除了数据,由于数据表发生变化,需要重新连接sql)session.query(Sale).filter(Sale.year

== 2010).update({"profit_from_sale":666})

session.query(Sale).filter(Sale.year == 2010).update({Sale.profit_from_sale:Sale.profit_from_sale+333})

session.commit()#

关闭session****************session.close() # ###################pandas模式###################

# 将DataFrame/Series写入sql里面#

sale1为写入表的名称;conn为SQLAlchemy/DBAPI2连接sql的引擎;schema为设定模式默认为默认模式;#

if_exists:{'fail','replace','append'}为如果存在相同的表,fail不操作不添加,#

replace删除原表重新添加,append插入数据(列名要一致,尾端插入)。#

三者在没有原表时都会创建新表,default

‘fail’;#

index:default

True,将DataFrame的index作为一列写入sql里;#

index_label:{string

or sequence}, default None,设置sql的索引所在的列(名);#

chunksize:{int}, default None,设置每次写入sql里的DF行数,若为空,则一次心写入全部;#

dtype:{dict of column name to SQL type}, default

None,写入sql里面的列解释,必须是在#

SQLAlchemy模式下sale.to_sql('sale1',conn,if_exists='append',index

= 0,index_label='year',chunksize

= None) # 将sql里面的数据读取到DF

# schema为sql的模式;index_col为指定sql里的一列为DF的index;#

coerce_float将非数字非字符串自动转化为浮点数,默认为True;#

parse_dates解析列属性,输入List

of column names将对应的列内容转化为时间日期格式。#

输入Dict{column_name:

format string}将列内容转化为对应的字符串格式.

# 输入Dict{column_name:

arg dict}将列内容转化为pandas.to_datetime()格式,

# arg dict为pandas.to_datetime()参数;

# columns为需要查询sql的table的列内容所对应的列名,默认None为全查readSqlTable1

= pd.read_sql_table('sale1',conn,parse_dates=('year'))type(readSqlTable1['year'][0])#pandas._libs.tslib.TimestampreadSqlTable2

= pd.read_sql_table('sale1',conn,parse_dates={'year':'%Y-%M-%D'},columns=['year','sale'])type(readSqlTable2['year'][0])#datetime.datereadSqlTable3

= pd.read_sql_table('sale1',conn,parse_dates={'year':{'format':'%Y-%M-%D'}})type(readSqlTable3['year'][0])#datetime.date

# 参数同上readSqlQuery

= pd.read_sql_query('select

* from sale1',conn)

readSql1 = pd.read_sql('select

* from sale1',conn)

readSql2 = pd.read_sql('sale1',conn) # 关闭sql连接conn.close()

mysql python插件_基于SQLAlchemy连接mysql库(pymsql插件)相关推荐

  1. spring连接mysql出现问题_使用spring连接mysql数据库出错

    最近在学习spring框架,但是在学到JdbcTemplate时连接数据库一直报错,百度谷歌各种查找都能没有解决问题,简直要癫狂,报错信息如下: org.springframework.jdbc.Ca ...

  2. mysql 多进程配置_基于mysql_multi实现MySQL多实例多进程配置

    环境设置 一台服务器配置IP为:192.168.200.111 主机名为:localhost 实验初始配置:关闭防火墙与selinux systemctl stop firewalld iptable ...

  3. mysql 可视化监控_基于Prometheus构建MySQL可视化监控平台

    对于MySQL的监控平台,相信大家实现起来有很多了:基于天兔的监控,还有基于zabbix相关的二次开发.相信很多同行都应该已经开始玩起来了.我这边的选型是prometheus + granafa的实现 ...

  4. php和mysql宿舍管理系统_基于PHP和MySQL的校园办公自动化系统

    1办公自动化的概念办公自动化是指通过计算机技术和网络技术实现办公人员信息交流.资源共享.协作办公及异时异地办公,它是一种新型的办公方式.通过办公自动化系统,系统内部人员可以跨越时间.地点方便快捷地共享 ...

  5. 基于php和mysql的商城_基于PHP和MySQL的网上购物系统设计与实现

    随着网络技术的飞速发展和进步,人们的生活模式也发生了天翻地覆的变化, 数字技术特别是网络己成为了人们工作和生活的一部分,而数字技术也将朝着电 子化.虚拟化.网络化.数字化的方向发展.这将为电子商务走进 ...

  6. python mysql ssh隧道_在python中使用ssh隧道连接mysql

    通常为了保证数据库安全,不会允许直接连接数据库,而是需要通过SSH隧道去连接服务器背后的数据库: 今天我在用Python连接远程的MySQL时,直连遇到了无法连接的情况,使用了SSH隧道之后解决了问题 ...

  7. sqlalchemy 使用mysql_使用SQLALchemy连接MySql数据库并进行操作

    "导语:这期主要学一下利用SQLALchemy连接MySql数据库以及对数据库的增删改查的操作,可能代码部分很多还不能理解,我觉得像一些固定写法先用着(比如引入的类等),再慢慢体会缘由&qu ...

  8. java mysql教程基于_java基于jdbc连接mysql数据库功能实例详解

    本文实例讲述了java基于jdbc连接mysql数据库的方法.分享给大家供大家参考,具体如下: 一.JDBC简介 Java 数据库连接,(Java Database Connectivity,简称JD ...

  9. 使用sqlalchemy连接mysql时出现sqlalchemy.exc.OperationalError错误1130

    使用sqlalchemy连接mysql时出现sqlalchemy.exc.OperationalError错误1130 错误如图所示: **解决方法:**将SQLALCHEMY_DATABASE_UR ...

最新文章

  1. Ubuntu 想要更新源 报错 “E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用)”
  2. 国产最强开源 API 网关,没有之一,不接受任何反驳!
  3. python django 动态网页_使用Django创建动态页面
  4. angularjs与后台传值接收值
  5. 013_CSS兄弟选择器
  6. mfc 加密解密_[源码和文档分享]基于MFC实现的AES加密解密程序
  7. python有参装饰器 多个装饰器装饰一个
  8. 项目管理中的组织计划
  9. 【学术相关】IEEE TBD, 这个Trans刚被SCI收录,预计首个IF4
  10. SAP Spartacus 服务器端渲染文件 server.js 和构建后的 main.js 对比
  11. HBase原理 – snapshot 快照
  12. zoom怎么解除静音_如何召开一场Zoom视频会议
  13. vsftpd安装包下载
  14. JAVA SE — Day 16
  15. 涉案金额2亿多!贺金虎、刘国庆非法吸收公众存款案开庭
  16. 骑着单车追随你——西西里的美丽传说
  17. 搞一下TDA4 | 03 TDA4 辅助引导加载程序SBL
  18. Learning Standard C++ as a New Language ( By Bjarne Stroustrup )
  19. ElasticSearch基础介绍:5:可视化工具之cerebro
  20. 4、windows与jetson tx2文件互传工具

热门文章

  1. 【电气专业知识问答】问:大型发电厂的电气主接线有何特点?
  2. 用小说的形式讲解Spring(2) —— 注入方式哪家强
  3. 两台计算机的ip地址怎么配置,电脑两个或多个IP地址设置方法
  4. 2013年中南大学计算机研究生复试机试题解
  5. 滤波器频率响应 matlab,求数字滤波器Hz的频率响应函数freqz.PPT
  6. irc怎么用_我们的高中如何用Mattermost取代IRC
  7. 怎样更换计算机主板电池,笔记本电脑主板电池怎么更换?教你更换主板电池的方法...
  8. Future和CompletableFuture的用法和区别
  9. 13.python的函数(四)——高级特性
  10. C Shell 详解