zoukankan      html  css  js  c++  java
  • [zz]sqlalchemy使用

    个人总结:

          这个是非常简单易懂的不使用declarative_base的例子,保存一下

    -----------------------------------------------------------我是无情的分割线--------------------------------------------------------------

    应用程序离不开对数据的操作,因为正在计划做一个桌面小程序练手Python,所以开始了Python的数据库操作的学习。

        提到数据库,就不得不提ORM,所谓万物皆对象,正是有了非常方便的ORM工具,才使得编程脱离了繁琐而冗余的“select”操作,把我们的注意力转移到了程序的逻辑上面来。从搜索的口碑看来,SQLAlchemy作为Python下的一款ORM工具的评价是相当不错的。看着SQLAlchemy,让我想起了Hibernate,他们非常像。

        接触了Python,才让我认识了SQLite,才让我抛弃了Access。作为轻量级数据库的应用足足有余。推荐一款GUI下的SQLite管理工具  。

        工具都齐了就开工。

        实现一个简单的对“用户”信息的CRUD操作。首先定义一个”用户“类,文件名为us.py

        class user(object):
    def __init__(self,name,age,password):
    self.name=name
    self.age=age
    self.password=password

        非常简单的一个user类,它必须继承object这个数据类型。有关这个东西的具体机制好像牵扯到”元类“这个概念,我没有深入去研究,总之要想实现ORM,必须要这样写…(先实现了再说)

        来写一个test.py,内容如下(因为程序中有中文,虽然是注释,但也要在第一行加上#coding=gbk,当然#coding=utf也行,但这样一来,中文会被转变成unicode(eclipse下),看也看不懂了澹

    #coding=gbk
     
    from sqlalchemy import *
    from sqlalchemy.orm import *
     
    from us import *
     
    #建立数据库引擎,这里使用的是相对路径,数据库的位置在当前文件的目录下。
     
    db=create_engine('sqlite:///ew.db')
     
    #设置metadata并将其绑定到数据库引擎
     
    metadata = MetaData(db)
     
    #创建metadata,这里的checkfirst参数是检测是否已经建立,能有效的防止错误。
     
    metadata.create_all(checkfirst=True)
     
    #这里使用到了Table函数,这个就是定义数据库里面新建的表啦。表名叫users
     
    users = Table('users', metadata,
    Column('user_id', Integer, primary_key=True),
    Column('name', String(40)),
    Column('age', Integer),
    Column('password', String),
    )
     
    #定义好了,那就执行吧,这样数据库中的users表就被创建了。
     
    users.create(checkfirst=True)
     
    #把user类和数据库中的users表匹配起来,这样user类的各个属性就和users表神奇的搭配起来了
    #这里要注意的是user类的属性和users表的列名要一致哦(好像支持别名的,不过没研究)
     
    mapper(user,users)
     
    #可以这么说,至此ORM的配置已经完成了
    #下面我们就可以直接对user类进行操作,而不必关心后台数据库的具体实现了,全部交给SQLAlchemy处理
    #这里对于数据的传递要用到session这个东东
    #可以把它比喻成一个端盘子的,你只要把东西丢给它,吩咐好干什么就行了。
    #首先创建Session,并将其绑定到数据库引擎,嘿嘿,这个是专门服务与db数据库的Waiter哦。
     
    Session=sessionmaker(bind=db)
    session=Session()
     
    #session准备就绪,来给他吩咐任务吧。定义一个新用户newuser。
     
    newuser=user('Joke',12,'ddd')
     
    #把newuser丢给session
     
    session.add(ed_user)
     
    #执行
     
    session.commit()
     
    #看看数据库有没有添加成功?就这么简单
     
    #来看看查找,修改和删除
    #session.query()括号里面的参数意思是指明查找的对象
    #因为user已经和users表匹配,实际上也就是select * from users
    #后面的filter_by参数的含义也就是where users.age=12
    #明白了ORM带来的好处了吧,真正把对数据的操作变成了一种“享受”
    #first()参数的含义是返回结果集中的第一条数据。
     
    u=session.query(user).filter_by(age=12).first()
     
    #来对查询出来的数据修改一下
     
    u.age=44
     
    #丢给session执行。这里的对象u已经持久化了,直接提交session,自动更新数据。
     
    session.commit()
     
    #看看数据库的数据是不是修改了?
    #再来看删除
     
    u=session.query(user).filter_by(age=44).first()
    session.delete(u)
    session.commit()
    
  • 相关阅读:
    'Undefined symbols for architecture i386,clang: error: linker command failed with exit code 1
    The codesign tool requires there only be one 解决办法
    XCode iOS project only shows “My Mac 64bit” but not simulator or device
    Provisioning profile XXXX can't be found 的解决办法
    UIView 中的控件事件穿透 Passthrough 的实现
    Xcode4.5出现时的OC新语法
    xcode 快捷键(持续更新)
    打越狱包
    php缓存与加速分析与汇总
    浏览器的判断
  • 原文地址:https://www.cnblogs.com/zhangzhang/p/2440492.html
Copyright © 2011-2022 走看看