烦恼一般都是想太多了。

0%

关于Python做数据库同步的一些库及使用

之前有用过 Python 来做 Oracle 与 MySQL, MySQL 与 MySQL 之间的同步。但是一直没有仔细探究这几个库的用法。现在就好好来看看。

MySQLdb

这玩意不 Python 3.0 并不支持。因为我需要用到 Python 3.0 所以就放弃他了吧。

Mysqlclient

完全兼容MySQLdb的衍生版;同时兼容Python3.x

是Django ORM的依赖工具。

原生SQL操作数据库。

PyMySQL

Github 上的 PyMySQL 是一个纯 Python 实现的 MySQL 客户端,基于 PEP249。很多 API 都与 MySQLdb 相似。但不支持 __mysql 提供的那些低级底层 API 如 data_seek, store_result, user_result 等。

文档地址在这里

要求是在 MySQL 5.5 以上 或 MariaDB 5.5 以上使用。

但是貌似我用在 MySQL 5.1.73 上也没有问题?

习惯了 MySQLdb 的可以这样来获取与其一样的使用方法:

pymysql.install_as_MySQLdb()

SQLAlchemy

SQLAlchemy 是一个 ORM (对象关系映射),其提供了非常强大的性能及方便性。

既支持原生 SQL,又支持 ORM 的工具;

原理

SQL 数据库在行为上与对象集合不同,其更关注数据的容量和性能:对象集合与行或列数据也不一样,其更关注抽象出来的东西。SQLAlchemy 是为了在这其中取得平衡。

SQLAlchemy 认为 数据库应该是一个相关的代数引擎,而不仅仅是表的集合。可以从表,join 以及其他的选择语句来获取;所有这些来源都可以看做是一个巨大的数据结构。SQLAlchemy的表达式语言建立在这个概念的核心之上。

SQLAlchemy以其对象关系映射器(ORM)而闻名,ORM是一个提供数据映射器模式的可选组件,其中类可以以开放式,多种方式映射到数据库,允许对象模型和数据库模式从一开始就以完全分离的方式开发。

Pandas

Pandas 是一个数据分析库,当然其提供了很多操作数据的方法。对于帧(二维数据),其提供很多类似与 SQL 的的方法,如 join, update 等。

对于二维数据 DataFrame,其有几类方法或值。

  • 统计(针对轴,如 size, shape, ndim,
  • 转换(astype, copy, isna(), notna(), bool())
  • 索引及遍历(at, iat, loc, iloc, items(), keys())
  • 二元操作
  • 函数应用(apply, applymap, agg, aggregate, transform, groupby, rolling)
  • 计算及描述(count, diff)等
  • 重建索引,选择,标签操作(add_prefix, add_suffix, align, reindex)
  • 变形,排序,转置
  • 结合,联接,合并(append(), assign(), join(), merge(), update())
  • 序列号及IO(一批 to/from 方法)

IO顶级方法。

定义在 pandas 命名空间内

  • read_table()
  • read_csv()
  • read_sql() 可以读取查询也可以读取一个表。根据输入定位到下面的两个方法中。依赖于一个 SQLAlchemy 实例。
  • read_sql_table() 读取一个表
  • read_sql_query() 读取一个查询
  • DataFrame.to_sql() 将数据帧写到数据库中。依赖于一个 SQLAlchemy 实例。
  • read_json()
  • ….

使用

使用 SQLAlchemy 来连接,Pandas 来处理,然后 DataFrame 来写入。