1

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()  
posted @ 2019-12-19 17:01  小白森  阅读(597)  评论(0编辑  收藏  举报