python sqlalchemy orm

Posted on Posted in python
Tips: 本文创建于2016年8月18日,已超过 2 年,内容或图片可能已经失效!

> python sqlalchemy 基本操作

  1. #!/usr/bin/env python  
  2. # coding:utf-8  
  3. import sqlalchemy  
  4. # http://docs.sqlalchemy.org/en/rel_1_0/core/engines.html   #各种引擎示例  
  5. from sqlalchemy import create_engine  
  6. from sqlalchemy.ext.declarative import declarative_base #根据数据库引擎,创建基类  
  7. from sqlalchemy import Column, Integer, String  
  8. from sqlalchemy.orm import sessionmaker # 类工场函数,事物  
  9.   
  10. print sqlalchemy.__version__  
  11. engine = create_engine('sqlite:///foo.db',echo=True# echo 显示原始sql  
  12.   
  13. Base = declarative_base() # 类工场函数  
  14.   
  15. class Testdb(Base): #集成类  
  16.     __tablename__ = "testdb" # 定义数据表名称,确保表名唯一  
  17.   
  18.     id = Column(Integer, primary_key=True# 为每个字段增加属性  
  19.     name = Column(String)  
  20.     fullname = Column(String)  
  21.     password = Column(String)  
  22.   
  23.     def __repr__(self): # 定义类的实例打印格式  
  24.         return "<Testtb(name='%s', fullname='%s', password='%s')>" % (self.name,self.fullname,self.password)  
  25. #Base.metadata.create_all(engine) # 创建这个类的数据库和表  
  26.   
  27. ed_user = Testdb(name="ed", fullname="ED name", password='edpassword')  
  28. print ed_user  
  29. # 事物  
  30. Session = sessionmaker(bind=engine)  
  31. session = Session()  
  32. # 插入  
  33. #session.add(ed_user)  
  34. #our_user = session.query(Testdb).filter_by(name='ed').first() # select * from testdb where name="ed" limit 1  
  35. #  
  36. #session.add_all([  
  37. #   Testdb(name='wendy', fullname='wendy name', password='wendypasswd'),  
  38. #   Testdb(name='mary',fullname='mary name', password='marypasswd'),  
  39. #   Testdb(name='fred', fullname='fred name', password='fredpasswd')])  
  40. #  
  41. #session.commit() # 提交  
  42. # 扫描全表  
  43. #print session.query(Testdb).filter_by(name='ed').first() # select * from testdb where name="ed" limit 1  
  44. #print session.query(Testdb).all()  
  45.   
  46. # 排序  
  47. # for row in session.query(Testdb).order_by(Testdb.id):  
  48. #   print row  
  49.   
  50. # in  
  51. #for row in session.query(Testdb).filter(Testdb.name.in_(['ed','wendy','jack'])):  
  52. #   print row  
  53.   
  54. # not in  
  55. #for row in session.query(Testdb).filter(~Testdb.name.in_(['ed','wendy','jack'])):  
  56. #   print row  
  57.   
  58. # count  
  59. # print session.query(Testdb).filter(Testdb.name=='ed').count()  
  60.   
  61. # and or  
  62.   
  63. #from sqlalchemy import and_,or_  
  64. #for row in session.query(Testdb).filter(and_(Testdb.name == 'ed', Testdb.fullname == 'ED name')):  
  65. #   print row  
  66. #for row in session.query(Testdb).filter(or_(Testdb.name =='ed', Testdb.name == 'wendy')):  
  67. #   print row  
  68.   
  69. # 创建一个带有外键的表  
  70.   
  71. from sqlalchemy import ForeignKey  
  72. from sqlalchemy.orm import relationship, backref  
  73.   
  74. class Address(Base):  
  75.     __tablename__ = 'addresses'  
  76.     id = Column(Integer, primary_key=True)  
  77.     email_address = Column(String, nullable=False)  
  78.     user_id = Column(Integer, ForeignKey('testdb.id'))  
  79.     user = relationship("Testdb",backref=backref('addresses',order_by=id))  
  80.     def __repr__(self):  
  81.         return "<Address(email_address='%s')>" % self.email_address  
  82.   
  83. #Base.metadata.create_all(engine)  
  84. # join  
  85. jack = Testdb(name="jack", fullname="jack Bean", password="gjffdd")  
  86. jack.addresses = [  
  87.     Address(email_address='jack@qq.com'),  
  88.     Address(email_address='123@qq.com')]  
  89. session.add(jack)  
  90. session.commit()  
  91. for u, a in session.query(Testdb,Address).\  
  92.     filter(Testdb.id==Address.user_id).\  
  93.     filter(Address.email_address=='jack@qq.com').all():  
  94.     print u, a  
» 转载请注明来源:若我若鱼 » python sqlalchemy orm

Leave a Reply

Your email address will not be published. Required fields are marked *

1 × one =