zoukankan      html  css  js  c++  java
  • SQLAlchemy

             

    SQLAlchemy安装

    1. 安装  
    2. pip install sqlalchemy -i https://pypi.douban.com/simple  
    3. 连接的时候依赖pymysql  

    通过SQLAlchemy连接数据库

    1. from sqlalchemy import create_engine  
    2.         
    3. 数据库的配置变量  
    4. HOSTNAME = '127.0.0.1'  
    5. PORT     = '3306'  
    6. DATABASE = 'xt_flask'  
    7. USERNAME = 'root'  
    8. PASSWORD = 'root'  
    9. DB_URI = 'mysql+mysqldb://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)  
    10.         
    11. 创建数据库引擎  
    12. engine = create_engine(DB_URI)  
    13.         
    14. #创建连接  
    15. with engine.connect() as con:  
    16.     rs = con.execute('SELECT 1')  
    17.     print rs.fetchone()  
    18.         
    19. 首先从sqlalchemy中导入create_engine,用这个函数来创建引擎,然后用engine.connect()来连接数据库。其中一个比较重要的一点是,通过create_engine函数的时候,需要传递一个满足某种格式的字符串,对这个字符串的格式来进行解释:  
    20.         
    21. dialect+driver://username:password@host:port/database  
    22. dialect是数据库的实现,比如MySQLPostgreSQLSQLite,并且转换成小写。driverPython对应的驱动,如果不指定,会选择默认的驱动,比如MySQL的默认驱动是MySQLdbusername是连接数据库的用户名,password是连接数据库的密码,host是连接数据库的域名,port是数据库监听的端口号,database是连接哪个数据库的名字。  
    23.         
    24. 如果以上输出了1,说明SQLAlchemy能成功连接到数据库。  

    SQLAlchemy参数

    1. Column常用参数:  
    2.     default:默认值。  
    3.     nullable:是否可空。  
    4.     primary_key:是否为主键。  
    5.     unique:是否唯一。  
    6.     autoincrement:是否自动增长。  
    7.     onupdate:更新的时候执行的函数。  
    8.     name:该属性在数据库中的字段映射。  
    9.         
    10. sqlalchemy常用数据类型:  
    11.     Integer:整形。  
    12.     Float:浮点类型。  
    13.     Boolean:传递True/False进去。  
    14.     DECIMAL:定点类型。  
    15.     enum:枚举类型。  
    16.     Date:传递datetime.date()进去。  
    17.     DateTime:传递datetime.datetime()进去。  
    18.     Time:传递datetime.time()进去。  
    19.     String:字符类型,使用时需要指定长度,区别于Text类型。  
    20.     Text:文本类型。  
    21.     LONGTEXT:长文本类型。  
    22.         
    23. query可用参数:  
    24.     模型对象。指定查找这个模型中所有的对象。  
    25.     模型中的属性。可以指定只查找某个模型的其中几个属性。  
    26.     聚合函数。  
    27.     func.count:统计行的数量。  
    28.     func.avg:求平均值。  
    29.     func.max:求最大值。  
    30.     func.min:求最小值。  
    31.     func.sum:求和。  

         

    创建表

    1. # -*- coding: utf-8 -*-  
    2. from sqlalchemy.ext.declarative import declarative_base  
    3. from sqlalchemy import Column #   
    4. from sqlalchemy import Integer, String  # 属性  
    5.             
    6. Base = declarative_base()  # django models  
    7.             
    8. 创建表  
    9. class User(Base):  
    10.     __tablename__ = 'user'  
    11.     id = Column(Integer, primary_key=Trueautoincrement=True)  
    12.     name = Column(String(32), index=Truename='名字')  
    13.             
    14.             
    15. 数据库连接  
    16. from sqlalchemy import create_engine  
    17. engine = create_engine("mysql+pymysql://root:redhat@192.168.32.71:3306/my_sql?charset=utf8")  
    18.             
    19. engine数据库中创建所有继承Base的表  
    20. Base.metadata.create_all(engine)  

             

    增加数据

    1. # -*- coding: utf-8 -*-  
    2. from .create import engine, User  
    3. 增加数据  
    4. 创建会话窗口  
    5. from sqlalchemy.orm import sessionmaker  
    6. Session = sessionmaker(engine)  
    7. 打开会话窗口  
    8. db_session = Session()  
    9.             
    10. # ---单条数据  
    11. user_obj = User(name='Ywb')  # 实例化  
    12. db_session.add(user_obj) # 相当于 insert into  
    13.             
    14. 执行会化窗口中的所有操作  
    15. db_session.commit()  
    16. db_session.close()  
    17.             
    18. # ---增加批量数据  
    19. db_session.add_all([  
    20.     User(name='peach'),  
    21.     User(name='小红')  
    22. ])  
    23.             
    24. db_session.commit()  
    25. db_session.close()  
    26.             
    27. # ---扩展  
    28. user1 = User(name='11')  
    29. user2 = User(name='12')  
    30. user3 = User(name='13')  
    31. user4 = User(name='14')  
    32. db_session.add(user1)  
    33. db_session.add(user2)  
    34. db_session.add(user3)  
    35. db_session.add(user4)  
    36. db_session.commit()  # 全部添加进去  
    37. db_session.close()  

           

    过滤

    1. 过滤是数据提取的一个很重要的功能,以下对一些常用的过滤条件进行解释,并且这些过滤条件都是只能通过filter方法实现的:  
    2.         
    3. equals  
    4. query.filter(User.name == 'ed')  
    5.         
    6. not equals:  
    7. query.filter(User.name != 'ed')  
    8.         
    9. like  
    10. query.filter(User.name.like('%ed%'))  
    11.         
    12. in  
    13. query.filter(User.name.in_(['ed','wendy','jack']))  
    14. 同时,in也可以作用于一个Query  
    15. query.filter(User.name.in_(session.query(User.name).filter(User.name.like('%ed%'))))  
    16.         
    17. not in  
    18. query.filter(~User.name.in_(['ed','wendy','jack']))  
    19.         
    20. is null  
    21. query.filter(User.name==None)  
    22. 或者是  
    23. query.filter(User.name.is_(None))  
    24.         
    25. is not null:  
    26. query.filter(User.name != None)  
    27. 或者是  
    28. query.filter(User.name.isnot(None))  
    29.         
    30. and  
    31. from sqlalchemy import and_  
    32. query.filter(and_(User.name=='ed',User.fullname=='Ed Jones'))  
    33. 或者是传递多个参数  
    34. query.filter(User.name=='ed',User.fullname=='Ed Jones')  
    35. 或者是通过多次filter操作  
    36. query.filter(User.name=='ed').filter(User.fullname=='Ed Jones')  
    37.         
    38. or  
    39. from sqlalchemy import or_    
    40. query.filter(or_(User.name=='ed',User.name=='wendy')) 

         

    单表查询

    1. # -*- coding: utf-8 -*-  
    2. 单表查询  
    3. from sqlalchemy.orm import sessionmaker  
    4. from SQLAlchemy.create import engine, User  
    5. Session = sessionmaker(engine)  
    6. db_session = Session()  
    7.             
    8. # ---基本查询  
    9. # select * from name  
    10. user_list = db_session.query(User)  
    11. print(user_list)  # SELECT user.`名字` AS `user_名字`, user.id AS user_id FROM user  
    12.             
    13. # ---------------- 所有数据 ------------------  
    14. user_list = db_session.query(User).all() # [obj, obj]  
    15. for usr in user_list:  
    16.     print(usr.name)  
    17.             
    18. # ---------------- 一条数据 ------------------  
    19. user = db_session.query(User).first() # obj  
    20. print(user.name)  
    21.             
    22.             
    23. # ---------------- 带条件查询 ------------------  
    24. # --- filter  
    25. user_list = db_session.query(User).filter(User.id==2).all()  # [obj, obj]  
    26. print(user_list)  
    27.             
    28. user_list = db_session.query(User).filter(User.id >= 1).all() # [obj, obj]  
    29. for user in user_list:  
    30.     print(user.id) # 按照id排序,因为添加是id  
    31.             
    32. # --- filter_by  
    33. user = db_session.query(User).filter_by(id=2).first()  # obj  
    34. print(user)  
    35.             
    36. # --- 扩展-查看sql语句  
    37. sql = db_session.query(User).filter(User.id >= 1)  
    38. print(sql)  
    39. """  
    40. SELECT user.`名字` AS `user_名字`, user.id AS user_id   
    41. FROM user   
    42. WHERE user.id >= %(id_1)s  
    43. """  

           

    修改

    1. # -*- coding: utf-8 -*-  
    2. 更新修改数据  
    3. from sqlalchemy.orm import sessionmaker  
    4. from SQLAlchemy.create import engine,User  
    5. Session = sessionmaker(engine)  
    6. db_session = Session()  
    7.           
    8. 单条修改  
    9. # update `uesr` set `name` = 'haha' where id =1  
    10. res = db_session.query(User).filter(User.id==1).update({  
    11.     "name": 'haha'  
    12. })  
    13.           
    14. print(res)  # 返回影响的行数  
    15. db_session.commit()  
    16. db_session.close()  
    17.           
    18. 批量修改  
    19. res = db_session.query(User).filter(User.id > 1).update({  
    20.     "name": "1234"  
    21. })  
    22.           
    23. print(res)  
    24. db_session.commit()  
    25. db_session.close()  

           

    删除

    1. # -*- coding: utf-8 -*-  
    2. 删除数据  
    3. from sqlalchemy.orm import sessionmaker  
    4. from SQLAlchemy.create import engine,User  
    5. Session = sessionmaker(engine)  
    6. db_session = Session()  
    7.           
    8. 删除单条  
    9. # delete from user where id = 1  
    10. res = db_session.query(User).filter(User.id==1).delete()  
    11. print(res)  # 返回影响的行数  
    12. db_session.commit()  
    13. db_session.close()  
    14.           
    15.           
    16. 删除多条  
    17. res = db_session.query(User).filter(User.name=="12345").delete()  
    18. print(res)  
    19. db_session.commit()  
    20. db_session.close()  
  • 相关阅读:
    冰淇淋主题博客皮肤
    在input内放置小图标的方法
    制作表单(第一期笔记):美化表单常用的css样式
    CSS:linear-gradient()背景颜色渐变--练习笔记
    css中的vertical-align在内联元素中的表现--垂直对齐(带图示)
    利用border特性做的几个纯css小图标
    CSS文本、字体个别属性效果对比
    CSS文本、字体属性(更新中)
    JavaScript HTML DOM 学习笔记
    JS、JQ获取容器内标签的个数
  • 原文地址:https://www.cnblogs.com/py-web/p/12068803.html
Copyright © 2011-2022 走看看