常用的第三方模块1(pip、pip3、虚拟环境_环境隔离、PyMysql、sqlalchemy)
常用的第三方模块(更新ing)
pip、pip3、PyMysql、sqlalchemy
1、pip、pip3
常用命令
| 序号 | 命令 | 功能 |
| 1 |
pip list |
列出已经安装的包,pip list >自定义文件,可以直接将依赖环境写入到指定的requirement.txt文件中 |
| 2 |
pip install 包名 |
安装要安装的包 |
| 3 |
pip install django==1.1.5 |
安装特定版本,=在python中代表赋值的作用,只有==才是等于的意思 |
| 4 |
pip freeze > requirement.txt |
导出python环境 |
| 5 |
pip install –r requirement.txt |
从导出的python环境中安装所需要的包 |
| 6 |
pip uinstall –r requirement.txt |
卸载导出的文件中,的包 |
| 7 |
pip list –o |
显示可升级的包 |
| 8 |
pip install <包名> -d <目录> |
只【下载】不安装 |
|
9 |
pip install <包名> -i http://pypi.v2ex.com/simple |
更换国内pypi镜像(推荐临时使用这些源),常见的镜像有阿里,华为,清华等 阿里:https://mirrors.aliyun.com/pypi/simple 豆瓣:http://pypi.douban.com/simple 中国科学技术大学:http://pypi.mirrors.ustc.edu.cn/simple/ |
2、虚拟环境
- 配置和使用虚拟环境,一般会用到virtualenv或virtualenvwrapper模块
- virtualenv的基本使用
-
View Code安装虚拟环境 virtualenv是用来创建虚拟环境的软件工具,我们可以通过pip或者pip3来安装 pip install virtualenv #windows pip3 install virtualenv 创建虚拟环境 创建虚拟环境非常简单,通过以下命令就可以创建了: 创建虚拟环境: virtualenv [虚拟环境的名字] 创建并指定python解释器版本,如上述不指定python的解释器,会使用系统默认的 virtualenv -p [使用的解释器] [虚拟环境的名字] 进入虚拟环境 虚拟环境创建好了以后,那么可以进入到这个虚拟环境中,然后安装一些第三方包,进入虚拟环境在不同的操作系统中有不同的方式,一般分为两种,第一种是Windows,第二种是*nix: windows进入虚拟环境:进入到虚拟环境的Scripts文件夹中,然后执行activate。 linux进入虚拟环境 source /path/to/virtualenv/bin/activate 一旦你进入到了这个虚拟环境中,你安装包,卸载包都是在这个虚拟环境中,不会影响到外面的环境。 退出虚拟环境 退出虚拟环境很简单,通过一个命令就可以完成 deactivate 创建虚拟环境的时候指定Python解释器 在电脑的环境变量中,一般是不会去更改一些环境变量的顺序的。也就是说比如你的Python2/Scripts在Python3/Scripts的前面,那么你不会经常去更改他们的位置。但是这时候我确实是想在创建虚拟环境的时候用Python3这个版本,这时候可以通过-p参数来指定具体的Python解释器: virtualenv -p C:\Python36\python.exe [virutalenv name]
-
-
virtualenvmrapper基本使用
- virtualenvwrapper这个软件包可以让我们管理虚拟环境变得更加简单。不用再跑到某个目录下通过virtualenv来创建虚拟环境,并且激活的时候也要跑到具体的目录下去激活。
-
View Code安装virtualenvwrapper linux pip install virtualenvwrapper windows pip install virtualenvwrapper-win virtualenvwrapper基本使用: 创建虚拟环境 mkvirtualenv my_env 那么会在你当前用户下创建一个Env的文件夹,然后将这个虚拟环境安装到这个目录下。 如果你电脑中安装了python2和python3,并且两个版本中都安装了virtualenvwrapper,那么将会使用环境变量中第一个出现的Python版本来作为这个虚拟环境的Python解释器。 切换到某个虚拟环境 workon my_env 退出当前虚拟环境 deactivate 删除某个虚拟环境 rmvirtualenv my_env 列出所有虚拟环境 lsvirtualenv 进入到虚拟环境所在的目录 cdvirtualenv 修改mkvirtualenv的默认路径: 在我的电脑->右键->属性->高级系统设置->环境变量->系统变量中添加一个参数WORKON_HOME,将这个参数的值设置为你需要的路径。 创建虚拟环境的时候指定Python版本: 在使用mkvirtualenv的时候,可以指定--python的参数来指定具体的python路径: mkvirtualenv --python==C:\Python36\python.exe hy_env
- virtualenvwrapper这个软件包可以让我们管理虚拟环境变得更加简单。不用再跑到某个目录下通过virtualenv来创建虚拟环境,并且激活的时候也要跑到具体的目录下去激活。
3、PyMysql
简介:
基本使用流程及常用操作:
- 确定数据库用户、登录主机权限及密码等基本信息。
- 创建数据库链接,获取操作句柄。 eg: conn_db = pymysql.connect(host='localhost',port=3310,user='woider',passwd='3243',db='python',charset='utf8')
- 创建游标,eg:cursor = conn_db.cursor()
- sql执行语句预编, eg: sql = " 增删改查原生sql语句"
- sql语句执行,可以是字符串形式的原生sql语句,也可以是执行的预编的sql语句,eg: effect_r = cursor.execute( )
- 确认执行操作,eg : conn_db.commit()
- 关闭游标, eg:cursor.close()
- 关闭链接, eg: conn_db.close()
4、sqlalchemy
基本使用流程及常用操作:
- 导入sqlalchemy模块及其常用的子模块,例如,create_engine,Column,Foreign_key……;从sqlalchemy.ext.declarative 中导入基类declarative_base;从sqlalchemy.orm 中导入sessionmaker,relationship……
- 创建数据库引擎, eg: engine_db = create_engine("mysql+pymysql://用户名:密码@登录主机地址",encoding = 'utf8')
- sqlalchemy 作为orm工具,不直接链接数据库,可以利用不同的工具包链接并工作于msql,orecal,SqlServer,SQLLITE等数据库
- mysql,mariadb,使用pymysql,mysqldb等,
- 使用cx_oracle,链接oracle数据库
- 详细的引擎配置,可参考 https://docs.sqlalchemy.org/en/20/dialects/index.html
- 常用参数
- max_overflow 设置最大连接数
- sqlalchemy 作为orm工具,不直接链接数据库,可以利用不同的工具包链接并工作于msql,orecal,SqlServer,SQLLITE等数据库
- 实例化数据表基类 eg: Base = declarative_base()
- 创建表结构,以类的形式,继承数据表基类Base
- 通过数据表基类,完成所有继承自Base的数据表的创建, eg:Base.metadata.create_all(engine_db)
- 初始化定义会话,绑定数据引擎 eg:Session_class = sessionmaker(bind=engine_db)
- 实例化会话,eg:session = Session_class()
- 通过建立的会话,对数据库中的数据表进行增删改查等基本操作
- 创建新增数据,session.add;session.add_all ,执行语句后,需要用session.commit()确认操作
- 查询数据记录,session.query(数据表名).filter_by(筛选过滤条件).all() 筛选器除了filter_by()还有filter(), all()是显示方式,类似的还有first()
- 删除数据记录,session.delete(数据记录) 数据记录可以通过查询、筛选获取
- 修改数据记录,通过筛选拿到数据记录后,直接通过字段名修改
- 数据回滚,session.rollback()
- 数据查询结果的计数,count()
- 数据查询结果的分组,group_by() session.query(func.count(User.name),User.name).group_by(User.name).all()
- 连表查询,基本连表查询 eg: session.query(User,User_test).filter(User.id ==User_test.cid).all()
- 通过relationship建立关系,实现两个表对象之间可以互相调用
基本操作的例子
例子1
1 import sqlalchemy 2 3 4 """_______________创建表结构,如果没有这个表则新建,有的话,只是完成打开对应的表_______________________""" 5 6 7 from sqlalchemy import create_engine 8 from sqlalchemy.ext.declarative import declarative_base 9 from sqlalchemy import Column,Integer,String 10 engine = create_engine("mysql+pymysql://guest04:pwd04@localhost/yourdb",encoding='utf8') #链接数据库,创建引擎 加上 echo =True 逐步打印 11 Base = declarative_base() #生成orm基类 12 class User(Base): 13 # 表结构,初始化定义 14 __tablename__='user' 15 id=Column(Integer,primary_key=True) 16 name=Column(String(32)) 17 password=Column(String(64)) 18 19 def __repr__(self): # 创建查找结果的返回格式 20 return "<%s name:%s>"%(self.id,self.name) 21 22 23 class User_test(Base): 24 __tablename__ = 'user_test' 25 cid = Column(Integer,primary_key=True) 26 cname = Column(String(32)) 27 teacher_id = Column(Integer) 28 29 def __repr__(self): # 创建查找结果的返回格式 30 return "<%s name:%s>"%(self.cid,self.cname) 31 32 33 34 35 36 Base.metadata.create_all(engine) # 生成完成初始化的表 37 38 39 40 """________________操作表结构,具体动作_____________________""" 41 42 43 # 1 创建数据 44 45 # from sqlalchemy.orm import sessionmaker 46 # Session_class = sessionmaker(bind=engine) #创建与数据库的会话类session class ,生成的是个类 47 # session = Session_class() #实例化会话 48 # 49 # 50 # 51 # user_obj = User(name="aaabbbccc",password="123456") 52 # print(user_obj.name,user_obj.id) #当前还没完成对象的创建,所以打印的时候为id空Null。实际效果类似于在navicat中,在字段列中添加了内容,但是还没有点下面的对勾,没有确认添加 53 # 54 # session.add(user_obj) #把要创建的额数据对象,添加到session会话对象中,稍后统一创建,可以添加多条 55 # print(user_obj.name,user_obj.id) #此时依然没完成对象的创建,所以打印的时候为空Null 56 # 57 # session.commit() #完成确认添加,此时在打印的时候,已经完成了最终的创建,id生成 58 59 60 61 62 # 2 查询数据 63 # from sqlalchemy.orm import sessionmaker 64 # Session_class = sessionmaker(bind=engine) #创建与数据库的会话类session class ,生成的是个类 65 # session = Session_class() 66 # 67 # data_check = session.query(User).filter_by().all() # filter()和filter_by() 参数格式不同。可以用多条件查询 all() 把查询内容做成一个列表, 类似的,还有first() 68 # print(data_check) 69 70 # 3 修改数据 71 # from sqlalchemy.orm import sessionmaker 72 # Session_class = sessionmaker(bind=engine) #创建与数据库的会话类session class ,生成的是个类 73 # session = Session_class() 74 # 75 # data_check = session.query(User).filter(User.id>1).filter(User.id<5).first() #拿到了1<id<5 的第一个记录, 76 # print(data_check) 77 # data_check.name = "change_tomy" #对name进行修改,可以多字段修改 78 # data_check.password = "changed" 79 # session.commit() #确认修改内容 80 81 # 4 删除数据 82 # from sqlalchemy.orm import sessionmaker 83 # Session_class = sessionmaker(bind=engine) #创建与数据库的会话类session class ,生成的是个类 84 # session = Session_class() 85 # data_del = session.query(User).filter(User.name.like("change%")).first() 86 # print(data_del) 87 # session.delete(del) #或者直接用 session.query(User).filter(User.name.like("change%")).first().delete() 88 # 89 # session.commit() 90 91 92 93 #5 回滚 94 # from sqlalchemy.orm import sessionmaker 95 # Session_class = sessionmaker(bind=engine) #创建与数据库的会话类session class ,生成的是个类 96 # session = Session_class() 97 # 98 # my_user = session.query(User).filter_by(id=1).first() 99 # my_user.name = "cc_changed" 100 # 101 # fake_user = User(name = "Rain",password ="666") 102 # session.add(fake_user) 103 # print(session.query(User).filter(User.name.in_(['cc_changed','Rain'])).all()) #session完成了修改 104 # 105 # session.rollback() 106 # print(session.query(User).filter(User.name.in_(['cc_changed','Rain'])).all()) 107 108 # 6 统计 109 # from sqlalchemy.orm import sessionmaker 110 # Session_class = sessionmaker(bind=engine) #创建与数据库的会话类session class ,生成的是个类 111 # session = Session_class() 112 # 113 # data_count = session.query(User).filter(User.name.like("aaab%")).count() 114 # print(data_count) 115 116 # 7 分组 117 # from sqlalchemy.orm import sessionmaker 118 # from sqlalchemy import func 119 # Session_class = sessionmaker(bind=engine) #创建与数据库的会话类session class ,生成的是个类 120 # session = Session_class() 121 # 122 # 123 # print(session.query(func.count(User.name),User.name).group_by(User.name).all()) 124 125 #8 连表查询1 126 127 # from sqlalchemy.orm import sessionmaker 128 # Session_class = sessionmaker(bind=engine) 129 # session = Session_class() 130 # 131 # ret = session.query(User,User_test).filter(User.id ==User_test.cid).all() 132 # 133 # 134 # print(ret)
例子2
1 import sqlalchemy 2 from sqlalchemy import create_engine 3 from sqlalchemy.ext.declarative import declarative_base 4 from sqlalchemy import Column,Integer,String,DATE,ForeignKey 5 from sqlalchemy.orm import sessionmaker,relationship 6 7 8 engine = create_engine("mysql+pymysql://guest04:pwd04@localhost/yourdb",encoding = 'utf8') 9 Base = declarative_base() 10 11 class StudentOrm(Base): 12 __tablename__ = 'student_orm' 13 id = Column(Integer,primary_key= True) 14 name = Column(String(32),nullable=False) 15 register_date = Column(DATE,nullable= False) 16 17 def __repr__(self): 18 return "<%s name:%s>"%(self.id,self.name) 19 20 class StudentRecord(Base): 21 __tablename__ = "student_record" 22 id = Column(Integer,primary_key=True) 23 day = Column(DATE,nullable=False) 24 status = Column(String(32),nullable=False) 25 stu_id = Column(Integer,ForeignKey("student_orm.id")) 26 27 student_orm = relationship("StudentOrm",backref="my_student_record") # 创建双向映射关系 28 29 def __repr__(self): 30 return "<%s day:%s status:%s>"%(self.student_orm.name,self.day,self.status) 31 32 Base.metadata.create_all(engine) 33 34 Session_class = sessionmaker(bind=engine) 35 session = Session_class() 36 37 38 ##_________创建数据表内容__________ 39 # s1 = StudentOrm(name='zhangsan',register_date = "2011-01-11") 40 # s2 = StudentOrm(name='lisi',register_date = "2011-02-12") 41 # s3 = StudentOrm(name='wangwu',register_date = "2011-02-13") 42 # 43 # 44 # study_obj1 = StudentRecord(day = "2011-03-01",status = "Y",stu_id = 1) 45 # study_obj2 = StudentRecord(day = "2011-03-01",status = "N",stu_id = 2) 46 # study_obj3 = StudentRecord(day = "2011-03-01",status = "Y",stu_id = 3) 47 # study_obj4 = StudentRecord(day = "2011-03-02",status = "Y",stu_id = 1) 48 # study_obj5 = StudentRecord(day = "2011-03-02",status = "N",stu_id = 3) 49 # study_obj6 = StudentRecord(day = "2011-03-02",status = "N",stu_id = 2) 50 # 51 # session.add_all([s1,s2,s3,study_obj1,study_obj2,study_obj3,study_obj4,study_obj5,study_obj6]) 52 # 53 # session.commit() 54 55 ##———连表查询————— 56 # stu_obj = session.query(StudentOrm,StudentRecord).filter(StudentOrm.id==StudentRecord.stu_id).all() 57 # print(stu_obj) 58 59 60 ##———relation建立表之间的调用查询关系————— 61 # stu_obj = session.query(StudentOrm).filter(StudentOrm.name=="zhangsan").first() # 从student_orm 中查到zhangsan ,再到student_record 表中查找上课记录 62 # print(stu_obj.my_student_record)
1 import sqlalchemy 2 from sqlalchemy.ext.declarative import declarative_base 3 from sqlalchemy import create_engine 4 from sqlalchemy import Column,Integer,String,Date,ForeignKey 5 from sqlalchemy.orm import sessionmaker,relationship 6 7 engin = create_engine("mysql+pymysql://guest04:pwd04@localhost/yourdb",encoding = 'utf-8') 8 Base = declarative_base() 9 10 class Addr(Base): 11 __tablename__="addresses" 12 id = Column(Integer,primary_key=True) 13 province = Column(String(32),nullable = False) 14 city = Column(String(32),nullable=False) 15 def __repr__(self): 16 return "<province:%s ,city:%s>"%(self.province,self.city) 17 18 19 class Customer(Base): 20 __tablename__="customer" 21 cid = Column(Integer,primary_key=True) 22 name = Column(String(32),nullable = False) 23 billcheck_addr_id = Column(Integer,ForeignKey("addresses.id")) #建立账单地址外键 24 mailing_addr_id = Column(Integer,ForeignKey("addresses.id")) #建立邮寄地址外键 25 billcheck_addr = relationship("Addr",foreign_keys=[billcheck_addr_id]) #建立关系,将映射的字段标记,在多外键的情况下区分是哪个字段调用 26 mailing_addr = relationship("Addr",foreign_keys=[mailing_addr_id]) #建立关系,将映射的字段标记,在多外键的情况下区分是哪个字段调用 27 def __repr__(self): 28 return "cid:%s name:%s"%(self.cid,self.name) 29 30 Base.metadata.create_all(engin) 31 32 Session_class = sessionmaker(bind=engin) 33 session = Session_class() 34 35 ##_____________添加数据记录_______________ 36 37 # addr_obj1 = Addr(province="beijing",city = "chaoyang") 38 # addr_obj2 = Addr(province="jiangsu",city = "nanjing") 39 # addr_obj3 = Addr(province="shandong",city = "qingdao") 40 # addr_obj4 = Addr(province="zhejiang",city = "hangzhou") 41 # 42 # cust_obj1 = Customer(name="zhangsan",billcheck_addr_id = 1,mailing_addr_id = 1) 43 # cust_obj2 = Customer(name="lisi",billcheck_addr_id = 3,mailing_addr_id = 1) 44 # cust_obj3 = Customer(name="wangwu",billcheck_addr_id = 1,mailing_addr_id = 2) 45 # cust_obj4 = Customer(name="zhaoliu",billcheck_addr_id = 3,mailing_addr_id = 3) 46 # cust_obj5 = Customer(name="sunqi",billcheck_addr_id = 2,mailing_addr_id = 4) 47 # 48 # session.add_all([addr_obj1,addr_obj2,addr_obj3,addr_obj4,cust_obj1,cust_obj2,cust_obj3,cust_obj4,cust_obj5]) 49 # session.commit() 50 51 52 53 54 check_obj = session.query(Customer).filter(Customer.name == "lisi").first() 55 print(check_obj.name,check_obj.billcheck_addr.province,check_obj.mailing_addr.province)
1 import sqlalchemy 2 from sqlalchemy.engine import create_engine 3 from sqlalchemy import Column,Integer,String,Date,ForeignKey,Table 4 from sqlalchemy.ext.declarative import declarative_base 5 from sqlalchemy.orm import sessionmaker,session,relationship 6 7 engine = create_engine("mysql+pymysql://guest04:pwd04@localhost/yourdb",encoding = 'utf-8') 8 Base = declarative_base() 9 10 book_m2m_author = Table( 11 ### 这张关系表,是mysql自动维护的,不需要人为操作,所以,可以不用class类创建的形式 12 "book_m2m_author",Base.metadata, 13 Column('book_id',Integer,ForeignKey("books.b_id")), 14 Column("author_id",Integer,ForeignKey("authors.a_id")) 15 ) 16 17 class Books(Base): 18 __tablename__='books' 19 b_id = Column(Integer,primary_key = True) 20 book_name = Column(String(32),nullable =False) 21 authors = relationship("Authors",secondary = book_m2m_author,backref = "books") 22 def __repr__(self): 23 return self.book_name 24 25 class Authors(Base): 26 __tablename__='authors' 27 a_id = Column(Integer,primary_key=True) 28 a_name = Column(String(32),nullable=False) 29 def __repr__(self): 30 return self.a_name 31 32 Base.metadata.create_all(engine) 33 34 35 Session_class = sessionmaker(bind=engine) 36 session = Session_class() 37 38 #—————————创建数据————————————— 39 40 # au_obj1 = Authors(a_name = "zhangsan") 41 # au_obj2 = Authors(a_name = "lisi") 42 # au_obj3 = Authors(a_name = "wangwu") 43 # au_obj4 = Authors(a_name = "zhaoliu") 44 # 45 # book_obj1=Books(book_name = "sss1") 46 # book_obj2=Books(book_name = "sss2") 47 # book_obj3=Books(book_name = "sss3") 48 # 49 # 50 # ##_______创建关联关系,在book_m2m_author中记录 51 # 52 # book_obj1.authors=[au_obj1,au_obj4] 53 # book_obj2.authors=[au_obj1,au_obj2] 54 # book_obj3.authors=[au_obj2,au_obj4,au_obj3] 55 # 56 # 57 # session.add_all([au_obj3,au_obj1,au_obj4,au_obj2,book_obj3,book_obj2,book_obj1]) 58 # session.commit() 59 60 61 ##——————————每名作者有多本书,通过作者查书名—————————————— 62 au_1 = session.query(Authors).filter(Authors.a_name == "zhangsan").first() 63 print(au_1,au_1.books) 64 65 ##______一本书对应多名作者,通过书名查找作者_________ 66 book_1 = session.query(Books).filter(Books.book_name =="sss1").first() 67 print(book_1,book_1.authors)