python sqlalchemy的简单用法
2014-07-26 16:43
239 查看
说实在的,至今我还没有完全理解sqlalchemy的设计思想,前几天想自己在网上抓些东西然后存放在数据库中以便于后续的数据分析,只是不想自己用DB-API写SQL语句去操作数据库,所以才想用ORM的方式,可是看了半天sqlalchemy的文档,都是在讲如何进行建库、建关系等,可是问题是我们经常要操作的数据库,库表的建立并不是通过ORM的方式建,更希望是通过原始的SQL语句去建,这种情况下有没有一种更方便的方式去访问数据库?答案当然是肯定的。
比如我用来抓取基金数据的库中包含两个表:
用来访问这两个表其实只需要简单构建两个类即可:
简单定义了两个类之后,不用关心数据表的内部实现,sqlalchemy会实现自动的映射,随后手册上的很多操作都可以正常使用了。
比如我用来抓取基金数据的库中包含两个表:
CREATE TABLE IF NOT EXISTS funds_list ( fund_code varchar(6) NOT NULL , type_id int DEFAULT NULL, fund_name varchar(32) NOT NULL , fund_origin_date date DEFAULT NULL, funds_company_id int DEFAULT NULL, comment varchar(256) DEFAULT NULL, PRIMARY KEY (fund_code) ); CREATE TABLE IF NOT EXISTS funds_value ( value_data_id bigserial, fund_code varchar(6) NOT NULL , value_date date NOT NULL, value_curr float DEFAULT NULL , PRIMARY KEY (value_data_id), UNIQUE (fund_code, value_date) ); -- -- 外键约束 funds_value -- ALTER TABLE funds_value ADD CONSTRAINT funds_value_ibfk_2 FOREIGN KEY (fund_code) REFERENCES funds_list (fund_code) ON DELETE CASCADE ON UPDATE CASCADE;
用来访问这两个表其实只需要简单构建两个类即可:
# -*- coding=utf-8 -*- import sqlalchemy from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base if __name__ == "__main__": db_user = 'lxq' db_pass = 'passwd' db_host = 'localhost' db_name = 'funds_data' engine_str = 'postgres://%s:%s@%s/%s' % (db_user,db_pass,db_host,db_name) engine = sqlalchemy.create_engine(engine_str) metadata = sqlalchemy.Metadata(bind = engine) Base = declarative_base(metadata) Session = sessionmaker(bind=engine) session = Session() # 关键在下面这两个类的定义,不需要针对每个数据项单独定义一个类的列,即能 # 够实现简单的ORM映射。 class Funds_list(Base): __table__ = Table('funds_list', metadata, autoload=True) class Funds_value(Base): __table__ = Table('funds_value', metadata, autoload = True) # 查询操作 result = session.query(Funds_value.value_data_id).filter( Funds_value.fund_code == '350005', Funds_value.value_date == '20140714').all() # 插入操作 item = Fund_List(fund_code = '350005', fund_name = u'天治创新先锋') session.add(item) session.commit()
简单定义了两个类之后,不用关心数据表的内部实现,sqlalchemy会实现自动的映射,随后手册上的很多操作都可以正常使用了。
相关文章推荐
- python sqlalchemy更简单的用法
- python中的hashlib模块简单用法
- Urllib.request用法简单介绍(Python3.3)
- python beautifulsoup简单用法
- Python中内建函数的简单用法说明
- Python学习笔记2-flask-sqlalchemy 简单笔记
- SQLAlchemy 的简单用法
- 常见python正则用法的简单实例
- python的argv最简单的用法
- Python 元组简单用法
- python基础教程之分支、循环简单用法
- Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
- python中while循环语句用法简单实例
- python简单的函数定义和用法实例
- python的argv最简单的用法
- python定时器(Timer)用法简单实例
- python 中生成器的简单介绍及用法
- 简单说明Python中的装饰器的用法
- python简单的函数定义和用法实例
- 举例简单讲解Python中的数据存储模块shelve的用法