python sqlalchemy的简单用法
来源:互联网 发布:数据结构与算法基础 编辑:程序博客网 时间:2024/06/05 09:55
说实在的,至今我还没有完全理解sqlalchemy的设计思想,前几天想自己在网上抓些东西然后存放在数据库中以便于后续的数据分析,只是不想自己用DB-API写SQL语句去操作数据库,所以才想用ORM的方式,可是看了半天sqlalchemy的文档,都是在讲如何进行建库、建关系等,可是问题是我们经常要操作的数据库,库表的建立并不是通过ORM的方式建,更希望是通过原始的SQL语句去建,这种情况下有没有一种更方便的方式去访问数据库?答案当然是肯定的。
比如我用来抓取基金数据的库中包含两个表:
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 sqlalchemyfrom sqlalchemy.orm import sessionmakerfrom sqlalchemy.ext.declarative import declarative_baseif __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会实现自动的映射,随后手册上的很多操作都可以正常使用了。
0 0
- python sqlalchemy的简单用法
- python sqlalchemy更简单的用法
- SQLAlchemy 的简单用法
- python flask SQLAlchemy 的用法
- SQLAlchemy的简单使用
- python 的 SQLAlchemy操作
- Python-SQLAlchemy的使用
- python sqlalchemy的应用
- python的sqlalchemy模块
- Python操作MySQL -即pymysql/SQLAlchemy用法
- sqlalchemy的简单操作汇总
- Python的ORM框架SQLAlchemy
- Python的ORM框架-SQLAlchemy
- Python SQLAlchemy
- python sqlalchemy
- Python SQLAlchemy
- sqlalchemy对sql的简单操作
- 在python sqlalchemy中子查询的使用
- 撒放大是飞洒发生
- SGU 134. Centroid 树的dfs遍历
- 算法导论习题解-第16章贪心算法
- hive (本地模式)
- H-1004-Let the Balloon Rise
- python sqlalchemy的简单用法
- 黑马程序员 委托模式--类别、协议、Block篇
- TOJ 1399. Blocks (打表或者暴力)
- OCP 1Z0 053 209
- Java主流技术、优秀工具、优秀书籍和优秀网站大罗列
- 22_md5加密密码
- hdu-1164-Eddy's research I
- 依序遍历0到100闭区间内所有的正整数,如果该数字能被3整除,则输出该数字及‘*’标记;如果该数字能被5整除,则输出该数字及‘#’标记;如果该数字既能被3整除又能被5整除,则输出该数字及‘*#’标记
- 王企鹅去打