时间:2021-07-01 10:21:17 帮助过:4人阅读
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 __author__ = ‘BillyLV‘ 4 5 import pymysql # 导入pymyql模块 6 7 # 创建连接 8 conn = pymysql.connect(host=‘192.168.199.176‘, user=‘root‘, passwd=‘root76‘, db=‘testdb‘) 9 # 创建游标 10 cur = conn.cursor() 11 12 list1 = [ 13 (‘tom‘, ‘m‘, ‘2‘, ‘1‘), 14 (‘jerry‘, ‘m‘, ‘2‘, ‘2‘), 15 (‘bill‘, ‘m‘, ‘2‘, ‘3‘), 16 (‘lily‘, ‘f‘, ‘2‘, ‘4‘), 17 (‘rain‘, ‘m‘, ‘2‘, ‘5‘), 18 (‘alice‘, ‘f‘, ‘2‘, ‘6‘), 19 ] 20 # 执行SQL 21 effect_row = cur.executemany(‘insert into students(name,sex,age,tel) values(%s,%s,%s,%s)‘, list1) 22 # 提交 23 conn.commit() 24 # 关闭游标 25 cur.close() 26 # 关闭连接 27 conn.close() 28 29 # 打印影响行数 30 print(effect_row)批量插入数据
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 __author__ = ‘BillyLV‘ 4 5 import pymysql # 导入pymyql模块 6 7 # 创建连接 8 conn = pymysql.connect(host=‘192.168.199.176‘, user=‘root‘, passwd=‘root76‘, db=‘testdb‘) 9 # 创建游标 10 cur = conn.cursor() 11 12 list1 = [ 13 ‘bill‘, 14 ‘lily‘, 15 ‘rain‘, 16 ‘alice‘, 17 ] 18 # 执行一条SQL 19 effect_row = cur.execute("delete from students where name=‘test‘") 20 # 执行多条SQL 21 effect_row = cur.executemany(‘delete from students where name=(%s)‘, list1) 22 23 # 提交 24 conn.commit() 25 26 # 打印影响行数 27 print(effect_row) 28 # 打印最后行id 29 print(cur.lastrowid) 30 31 # 关闭游标 32 cur.close() 33 # 关闭连接 34 conn.close()删除数据
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 __author__ = ‘BillyLV‘ 4 5 import pymysql # 导入pymyql模块 6 7 # 创建连接 8 conn = pymysql.connect(host=‘192.168.199.176‘, user=‘root‘, passwd=‘root76‘, db=‘testdb‘) 9 # 创建游标 10 cur = conn.cursor() 11 12 # 执行一条SQL 13 effect_row = cur.execute(‘update students set name=%s where id=2‘, ‘ta‘) 14 15 # 提交 16 conn.commit() 17 18 # 打印影响行数 19 print(effect_row) 20 # 打印最后行id 21 print(cur.lastrowid) 22 23 # 关闭游标 24 cur.close() 25 # 关闭连接 26 conn.close()更改数据
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 __author__ = ‘BillyLV‘ 4 5 import pymysql # 导入pymyql模块 6 7 # 创建连接 8 conn = pymysql.connect(host=‘192.168.199.176‘, user=‘root‘, passwd=‘root76‘, db=‘testdb‘) 9 # 创建游标 10 cur = conn.cursor() 11 12 # 执行SQL并返回受影响行数 13 effect_row = cur.execute(‘select * from students‘) 14 15 # 返回下一条数据 16 print(cur.fetchone()) 17 # 向下滚动5行,从下一行开始数数 18 cur.scroll(5, mode=‘absolute‘) 19 print(cur.fetchone()) 20 # 向上滚动3行,从当前行开始数数 21 cur.scroll(-3, mode=‘relative‘) 22 print(cur.fetchone()) 23 24 # 返回指定大小条数的数据 25 print(cur.fetchmany(2)) 26 # 返回所有数据 27 print(cur.fetchall()) 28 29 # 获取最新自增ID 30 print(cur.lastrowid) 31 # 打印影响行数 32 print(effect_row, ‘rows‘) 33 34 # 关闭游标 35 cur.close() 36 # 关闭连接 37 conn.close()查询数据
ORM介绍
orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的,为了保证一致的使用习惯,通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了,而不用直接使用sql语言。
orm的优点:
缺点:
SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。
组成部分:
SQLAlchemy本身无法操作数据库,其必须以来pymsql等第三方插件,Dialect用于和DBAPI进行交流,根据配置文件的不同调用不同的DBAPI,从而实现对DB的操作,如:
MySQL-Python mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname> pymysql mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>] MySQL-Connector mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname> cx_Oracle oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...] 更多:http://docs.sqlalchemy.org/en/latest/dialects/index.html
安装sqlalchemy
pip3 install sqlalchemy -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
sqlalchemy基本使用
步骤一:
使用 Engine/ConnectionPooling/Dialect 进行数据库操作,Engine使用ConnectionPooling连接数据库,然后再通过Dialect执行SQL语句。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 __author__ = ‘BillyLV‘ 4 5 from sqlalchemy import create_engine 6 7 engine = create_engine( 8 "mysql+pymysql://root:root76@192.168.199.176:3306/testdb?charset=utf8", 9 max_overflow=5, # 超过连接池大小外最多创建的连接 10 pool_size=10, # 连接池大小 11 pool_timeout=6, # 池中没有线程最多等待的时间,否则报错 12 pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接的回收(重置) 13 ) 14 15 engine.execute("CREATE TABLE user (id INTEGER NOT NULL AUTO_INCREMENT,name VARCHAR(32),password VARCHAR(64),16 PRIMARY KEY (id))") 17 18 engine.execute( 19 "insert into user(name,password) values(‘jack‘,‘jackpwd‘)" 20 ) 21 22 result = engine.execute(‘select * from user‘) 23 print(result.fetchall())create&insert table
步骤二:
使用 Schema Type/SQL Expression Language/Engine/ConnectionPooling/Dialect 进行数据库操作。Engine使用Schema Type创建一个特定的结构对象,之后通过SQL Expression Language将该对象转换成SQL语句,然后通过 ConnectionPooling 连接数据库,再然后通过 Dialect 执行SQL,并获取结果。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 __author__ = ‘BillyLV‘ 4 5 from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, ForeignKey, select 6 7 metadata = MetaData() 8 9 user = Table(‘user‘, metadata, 10 Column(‘id‘, Integer, primary_key=True), 11 Column(‘name‘, String(20)), 12 ) 13 14 color = Table(‘color‘, metadata, 15 Column(‘id‘, Integer, primary_key=True), 16 Column(‘name‘, String(20)), 17 ) 18 19 engine = create_engine("mysql+pymysql://root:root76@192.168.199.176:3306/testdb?charset=utf8", max_overflow=5) 20 conn = engine.connect() 21 22 # insert 23 sql = user.insert().values(id=8, name=‘h‘) 24 conn.execute(sql) 25 26 # update 27 sql = user.update().values(fullname=user.c.name) 28 sql = user.update().where(user.c.name == ‘cc‘).values(name=‘ab‘) 29 conn.execute(sql) 30 31 # delete 32 sql = user.delete().where(user.c.id > 3) 33 conn.execute(sql) 34 35 # select 36 # select_sql = select([user, ]) 37 # select_sql = select([user.c.id, user.c.name]) 38 # select_sql = select([user.c.name, color.c.name]).where(user.c.id==color.c.id) 39 # select_sql = select([user.c.name]).order_by(user.c.name) 40 select_sql = select([user]).group_by(user.c.id) 41 result = conn.execute(select_sql) 42 output = result.fetchall() 43 print(output) 44 conn.close()增删改查
步骤三:
使用 ORM/Schema Type/SQL Expression Language/Engine/ConnectionPooling/Dialect 所有组件对数据进行操作。根据类创建对象,对象转换成SQL,执行SQL。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 __author__ = ‘BillyLV‘ 4 5 import sqlalchemy 6 from sqlalchemy import create_engine 7 from sqlalchemy.ext.declarative import declarative_base 8 from sqlalchemy import Column, Integer, String 9 from sqlalchemy.orm import sessionmaker 10 11 engine = create_engine("mysql+pymysql://root:root76@192.168.199.176:3306/testdb?charset=utf8", encoding=‘utf-8‘, 12 echo=True, max_overflow=5) 13 14 Base = declarative_base() # 生成orm基类 15 16 17 class User(Base): 18 __tablename__ = ‘user‘ # 表名 19 id = Column(Integer, primary_key=True) 20 name = Column(String(32)) 21 password = Column(String(64)) 22 23 24 Base.metadata.create_all(engine) # 创建表结构 25 26 Session_class = sessionmaker(bind=engine) # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例 27 Session = Session_class() # 生成session实例 28 29 user_obj = User(name="bill", password="123456") # 生成你要创建的数据对象 30 print(user_obj.name, user_obj.id) # 此时还没创建对象呢,不信你打印一下id发现还是None 31 32 Session.add(user_obj) # 把要创建的数据对象添加到这个session里, 一会统一创建 33 print(user_obj.name, user_obj.id) # 此时也依然还没创建 34 35 Session.commit() # 现此才统一提交,创建数据 36 print(user_obj.name, user_obj.id)create&insert
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 __author__ = ‘BillyLV‘ 4 5 import sqlalchemy 6 from sqlalchemy import create_engine 7 from sqlalchemy.ext.declarative import declarative_base 8 from sqlalchemy import Column, Integer, String 9 from sqlalchemy.orm import sessionmaker 10 11 engine = create_engine("mysql+pymysql://root:root76@192.168.199.176:3306/testdb?charset=utf8", encoding=‘utf-8‘, 12 echo=True, max_overflow=5) 13 14 Base = declarative_base() # 生成orm基类 15 16 17 class User(Base): 18 __tablename__ = ‘user‘ # 表名 19 id = Column(Integer, primary_key=True) 20 name = Column(String(32)) 21 password = Column(String(64)) 22 23 24 Base.metadata.create_all(engine) # 创建表结构 25 26 Session_class = sessionmaker(bind=engine) # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例 27 Session = Session_class() # 生成session实例 28 29 user_obj = User(name="li", password="12345678") # 生成你要创建的数据对象 30 print(user_obj.name, user_obj.id) # 此时还没创建对象呢,不信你打印一下id发现还是None 31 32 Session.add(user_obj) # 把要创建的数据对象添加到这个session里, 一会统一创建 33 print(user_obj.name, user_obj.id) # 此时也依然还没创建 34 35 my_user = Session.query(User).filter_by(name="bill").first() # 查询user表name为bill的第一条数据 36 print(my_user.id, my_user.name, my_user.password) # 打印user表name为bill的id、name、password字段select
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 __author__ = ‘BillyLV‘ 4 5 import sqlalchemy 6 from sqlalchemy import create_engine 7 from sqlalchemy.ext.declarative import declarative_base 8 from sqlalchemy import Column, Integer, String 9 from sqlalchemy.orm import sessionmaker 10 11 engine = create_engine("mysql+pymysql://root:root76@192.168.199.176:3306/testdb?charset=utf8", encoding=‘utf-8‘, 12 echo=True, max_overflow=5) 13 14 Base = declarative_base() # 生成orm基类 15 16 17 class User(Base): 18 __tablename__ = ‘user‘ # 表名 19 id = Column(Integer, primary_key=True) 20 name = Column(String(32)) 21 password = Column(String(64)) 22 23 24 Base.metadata.create_all(engine) # 创建表结构 25 26 Session_class = sessionmaker(bind=engine) # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例 27 Session = Session_class() # 生成session实例 28 29 user_obj = User(name="li", password="12345678") # 生成你要创建的数据对象 30 print(user_obj.name, user_obj.id) # 此时还没创建对象呢,不信你打印一下id发现还是None 31 32 Session.add(user_obj) # 把要创建的数据对象添加到这个session里, 一会统一创建 33 print(user_obj.name, user_obj.id) # 此时也依然还没创建 34 35 # my_user = Session.query(User).filter_by(name="bill").first() # 查询user表name为bill的第一条数据 36 # print(my_user.id, my_user.name, my_user.password) # 打印user表name为bill的id、name、password字段 37 38 # 修改,把user表name为bill的第一条数据的name改为alex 39 my_user = Session.query(User).filter_by(name="bill").first() 40 my_user.name = "alex" 41 Session.commit() # 提交修改 42 print(my_user.id, my_user.name, my_user.password)update
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 __author__ = ‘BillyLV‘ 4 5 import sqlalchemy 6 from sqlalchemy import create_engine 7 from sqlalchemy.ext.declarative import declarative_base 8 from sqlalchemy import Column, Integer, String 9 from sqlalchemy.orm import sessionmaker 10 11 # 设置utf8编码字符集 12 engine = create_engine("mysql+pymysql://root:root76@192.168.199.176:3306/testdb?charset=utf8", encoding=‘utf-8‘, 13 echo=True, max_overflow=5) 14 15 Base = declarative_base() # 生成orm基类 16 17 18 class User(Base): 19 __tablename__ = ‘user‘ # 表名 20 id = Column(Integer, primary_key=True) 21 name = Column(String(32)) 22 password = Column(String(64)) 23 24 def __repr__(self): 25 return "<User(name=‘%s‘, password=‘%s‘)>" % ( 26 self.name, self.password) 27 28 29 Base.metadata.create_all(engine) # 寻找Base的所有子类,按照子类的结构在数据库中生成对应的数据表信息 30 31 Session_class = sessionmaker(bind=engine) # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例 32 Session = Session_class() # 生成session实例 33 34 user_obj = User(name="li", password="12345678") # 生成你要创建的数据对象 35 print(user_obj.name, user_obj.id) # 此时还没创建对象呢,不信你打印一下id发现还是None 36 37 Session.add(user_obj) # 把要创建的数据对象添加到这个session里, 一会统一创建 38 print(user_obj.name, user_obj.id) # 此时也依然还没创建 39 40 my_user = Session.query(User).filter_by(name="li").first() # 查询user表name为bill的第一条数据