Python - sqlalchemy Orm
来源:互联网 发布:北航软件学院研究生院 编辑:程序博客网 时间:2024/06/06 04:23
爪子又疼了,懒得写了
#!/usr/bin/env python3# -*- coding: utf-8 -*-from sqlalchemy import Column, String, Integer, ForeignKey,create_enginefrom sqlalchemy.ext.declarative import declarative_baseBase = declarative_base()class UrlModel(Base): __tablename__ = 'urls' id = Column(Integer, primary_key=True) realUrl = Column(String,unique=True) # relativeUrl = Column(String,default="") # 用来存储img的dir title = Column(Integer,default="Img") # 下载状态 state=Column('state',Integer,default=0) fileName=Column(String) def __init__(self,realUrl,title="imgs"): self.realUrl=realUrl self.title=title splitPath = realUrl.split('/') self.fileName = splitPath.pop() # 类似java toSring def __repr__(self): return "%s(%r,%r,%d,%r,%r,%r)"%(self.__class__.__name__,self.id,self.realUrl,self.fileName,self.title,self.state)def initialSession(filePath): engine = create_engine('sqlite:///'+filePath, echo=True) from sqlalchemy.orm import sessionmaker # Construct a sessionmaker object session = sessionmaker() # Bind the sessionmaker to engine session.configure(bind=engine) # Create all the tables in the database which are # defined by Base's subclasses such as User Base.metadata.create_all(engine) return session()if __name__ == '__main__': s=initialSession("wanimal.db") surl="http://www.baidu.com"; # SELECT urls.id AS urls_id, urls."realUrl" AS "urls_realUrl", urls.title AS urls_title, urls."fileName" AS "urls_fileName" FROM urls WHERE urls.id = ? # 2015-07-06 20:56:29,983 INFO sqlalchemy.engine.base.Engine (1,) # 不要用one,找不到数据会报 NoResultFound urlModel=s.query(UrlModel).filter(UrlModel.realUrl==surl).first() if not urlModel: urlModel=UrlModel(surl) s.add(urlModel) s.commit() urlModel.state=1; # 重复添加一个对象无效,自动转换为更新 s.add(urlModel) s.commit() urlModel.state=2; # 更新 # 2015-07-06 20:56:29,985 INFO sqlalchemy.engine.base.Engine UPDATE urls SET state=? WHERE urls.id = ? # 2015-07-06 20:56:29,985 INFO sqlalchemy.engine.base.Engine (2, 1) # 2015-07-06 20:56:29,987 INFO sqlalchemy.engine.base.Engine COMMIT s.add(urlModel); s.commit() # 2015-07-06 21:01:05,559 INFO sqlalchemy.engine.base.Engine DELETE FROM urls WHERE urls.id = ? # 2015-07-06 21:01:05,559 INFO sqlalchemy.engine.base.Engine (1,) # 2015-07-06 21:01:05,561 INFO sqlalchemy.engine.base.Engine COMMIT s.delete(urlModel) s.commit()
Query
Common Filter OperatorsHere’s a rundown of some of the most common operators used in filter():equals:query.filter(User.name == 'ed')not equals:query.filter(User.name != 'ed')LIKE:query.filter(User.name.like('%ed%'))IN:query.filter(User.name.in_(['ed', 'wendy', 'jack']))# works with query objects too:query.filter(User.name.in_(session.query(User.name).filter(User.name.like('%ed%'))))NOT IN:query.filter(~User.name.in_(['ed', 'wendy', 'jack']))IS NULL:query.filter(User.name == None)# alternatively, if pep8/linters are a concernquery.filter(User.name.is_(None))IS NOT NULL:query.filter(User.name != None)# alternatively, if pep8/linters are a concernquery.filter(User.name.isnot(None))AND:# use and_()from sqlalchemy import and_query.filter(and_(User.name == 'ed', User.fullname == 'Ed Jones'))# or send multiple expressions to .filter()query.filter(User.name == 'ed', User.fullname == 'Ed Jones')# or chain multiple filter()/filter_by() callsquery.filter(User.name == 'ed').filter(User.fullname == 'Ed Jones')OR:from sqlalchemy import or_query.filter(or_(User.name == 'ed', User.name == 'wendy'))MATCH:query.filter(User.name.match('wendy'))Notematch() uses a database-specific MATCH or CONTAINS function; its behavior will vary by backend and is not available on some backends such as SQLite.
Returning Lists and Scalars
A number of methods on Query immediately issue SQL and return a value containing loaded database results. Here’s a brief tour:all() returns a list:>>> query = session.query(User).filter(User.name.like('%ed')).order_by(User.id)SQL>>> query.all()[<User(name='ed', fullname='Ed Jones', password='f8s7ccs')>,<User(name='fred', fullname='Fred Flinstone', password='blah')>]first() applies a limit of one and returns the first result as a scalar:SQL>>> query.first()<User(name='ed', fullname='Ed Jones', password='f8s7ccs')>one(), fully fetches all rows, and if not exactly one object identity or composite row is present in the result, raises an error. With multiple rows found:SQL>>> from sqlalchemy.orm.exc import MultipleResultsFound>>> try:... user = query.one()... except MultipleResultsFound, e:... print eMultiple rows were found for one()With no rows found:SQL>>> from sqlalchemy.orm.exc import NoResultFound>>> try:... user = query.filter(User.id == 99).one()... except NoResultFound, e:... print eNo row was found for one()The one() method is great for systems that expect to handle “no items found” versus “multiple items found” differently; such as a RESTful web service, which may want to raise a “404 not found” when no results are found, but raise an application error when multiple results are found.scalar() invokes the one() method, and upon success returns the first column of the row:>>> query = session.query(User.id).filter(User.name == 'ed').\... order_by(User.id)SQL>>> query.scalar()7来源: <http://docs.sqlalchemy.org/en/rel_1_0/orm/tutorial.html>
0 0
- Python - sqlalchemy Orm
- Python SQLAlchemy MySQL ORM
- Python-ORM-SQLALchemy
- python orm 之 sqlalchemy
- python sqlalchemy orm
- Python SQLAlchemy ORM示例
- [Python] ORM implemented by sqlalchemy
- 使用Python数据库ORM SQLAlchemy
- python中ORM框架SQLAlchemy
- Python的ORM框架SQLAlchemy
- Python的ORM框架-SQLAlchemy
- Python ORM :SQLAlchemy基础使用
- Python的数据库ORM框架:SQLAlchemy
- Python的数据库ORM框架:SQLAlchemy
- python中的sqlalchemy ORM学习测试代码!
- Python的ORM框架SQLAlchemy入门教程
- Python的数据库ORM框架:SQLAlchemy
- python学习笔记(十五) - ORM框架(SQLAlchemy)
- Android-AppWidget
- V$LOCK视图的介绍和使用
- 从GDI到Direct2D:贴图
- Android屏幕图标尺寸规范
- hdu 3886 - Final Kichiku “Lanlanshu”(数位dp)多校联合
- Python - sqlalchemy Orm
- CSS规范 - 典型错误
- Android-自定义Launcher基本思想
- CSS规范 - 最佳实践
- LoadRunner的安装以及无法调用ie的解决方案
- JavaBean 用反射自己实现简单内省操作 基础
- CSS规范 - 优化方案
- mysql 数据库字段为 call 数据无法插入
- CSS规范 - 代码格式