python编写数据库api接口_python量化开发2|python与各数据库的接口调通

今天是2017.1.9r。

看到了之前已经开发的一些API,但是由于之前没有系统的学习python中类的编写,所以看起来还是有一些吃力的,甚至有一点点泄气。不过不知道从什么时候开始,自己每次遇到困难时总会在内心告诉自己,因为现在是在走上坡路才会感到吃力,说明你正在往上走,在进步。

这里会记录一些在看相关API中遇到的一些不懂的python中相应库和语法。

一、关于使用pip命令安装库

之前在terminal中用pip install时一直报错找不到相应版本的库。

所以只好下载对应库的.whl文件,然后再用pip install 命令安装这个.whl文件。

(这里是自己找到的一个包括所有第三方库whl文件的下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql )

二、python和各个数据库之间的接口调通

做这一类的开发必然会用到数据库中的数据,这就需要用python连接各类数据库,包括SQL Sever、Mysql、Oracle、MongoDB等。在python中使用sqlalchemy 库中的create_engine来建立连接。

from sqlalchemy import create_engine

from pymongo import MongoClient

db_engine=dict() #---用db_engine这个空字典来存储所有的连接

db_engine['MongoDB']=MongoClient('192.168.169.39', 40000)

db_engine['Tinysoft']=create_engine('mssql+pymssql://fes:fes@10.132.120.141:1433/TsFund', echo=False)

db_engine['PPW']=create_engine('mysql+pymysql://data_user_hr:0!sH,nSDC#m4oTha@211.154.153.26:3306/rz_hfdb_core?charset=utf8mb4', echo=False)

db_engine['TOS_RES']=create_engine('oracle://res:1@10.53.54.12:1521/orcl', echo=False)

三、sqlalchemy库 的使用

下面再说一些使用sqlalchemy库对数据库进行操作的例子。

from sqlalchemy import * # Column, String, create_engine,func, or_, not_

from sqlalchemy.orm import * # sessionmaker

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.types import CHAR, Integer

from odo import odo

(1)、底层处理

使用 Engine/ConnectionPooling/Dialect 进行数据库操作,Engine使用ConnectionPooling连接数据库,然后再通过Dialect执行SQL语句。

#创建引擎

from sqlalchemy import create_engine

from sqlalchemy.orm import sessionmaker

DB_CONNECT_STRING = 'mysql+mysqldb://root:123@localhost/ooxx?charset=utf8'

engine = create_engine(DB_CONNECT_STRING, echo=True)

DB_Session = sessionmaker(bind=engine)

session = DB_Session()

这里的 DB_CONNECT_STRING 就是连接数据库的路径。“mysql+mysqldb”指定了使用 MySQL-Python 来连接,“root”和“123”分别是用户名和密码,“localhost”是数据库的域名,“ooxx”是使用的数据库名(可省略),“charset”指定了连接时使用的字符集(可省略)。

create_engine() 会返回一个数据库引擎,echo 参数为 True 时,会显示每条执行的 SQL 语句,生产环境下可关闭。

sessionmaker() 会生成一个数据库会话类。

拿到 session 后,就可以执行 SQL 了:

session.execute('create database abc')

(2)、ORM功能使用

使用 ORM/Schema Type/SQL Expression Language/Engine/ConnectionPooling/Dialect 所有组件对数据进行操作。根据类创建对象,对象转换成SQL,执行SQL。

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index

from sqlalchemy.orm import sessionmaker, relationship

from sqlalchemy import create_engine

engine = create_engine("mysql+pymysql://fuzj:123123@127.0.0.1:3306/123", max_overflow=5)

Base = declarative_base() ---------------------------- declarative_base()用来表示

class Favor(Base):

__tablename__ = 'favor'

nid = Column(Integer, primary_key=True)

caption = Column(String(50), default='red', unique=True)

class Person(Base):

__tablename__ = 'person'

nid = Column(Integer, primary_key=True)

name = Column(String(32), index=True, nullable=True)

favor_id = Column(Integer, ForeignKey("favor.nid"))

Base.metadata.create_all(engine) #创建表

# Base.metadata.drop_all(engine) #删除表

declarative_base() 创建了一个 BaseModel 类,这个类的子类可以自动与一个表关联。

以 User 类为例,它的 tablename 属性就是数据库中该表的名称,它有 id 和 name 这两个字段,分别为整型和 30 个定长字符。Column 还有一些其他的参数,我就不解释了。

最后,BaseModel.metadata.create_all(engine) 会找到 BaseModel 的所有子类,并在数据库中建立这些表;drop_all() 则是删除这些表。

(3)、Odo:实现不同格式数据的转换

Odo 库是Blaze的一个衍生项目. 用于数据交换,保证了各种不同格式数据间的移植 (CSV, JSON, HDFS, and more) 并且跨越不同的数据库 (SQL 数据库, MongoDB, 等等) ,用法简单,Odo(source, target)

odo需要传递两个参数,第一个参数是数据来源,第二个参数是目标数据格式。

>>> from odo import odo

>>> odo((1, 2, 3), list)

[1, 2, 3]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值