美文网首页生活不易 我用python
python量化开发2|python与各数据库的接口调通

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

作者: 是蓝先生 | 来源:发表于2017-04-20 09:13 被阅读438次

    今天是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]

    相关文章

      网友评论

        本文标题:python量化开发2|python与各数据库的接口调通

        本文链接:https://www.haomeiwen.com/subject/ahchbttx.html