[TOC]
pymysql
查
import pymysql
conn = pymysql.connect(host="localhost",user="root",password="password",database="db2")# 连接数据库
cursor = conn.cursor()# 获取游标
sql = "select * from user;"# SQL语句
cursor.execute(sql)# 执行SQL语句
# result = cursor.fetchone()# 查看一个结果
# result = cursor.fetchmany(2)# 查看2个结果
result = cursor.fetchall() # 查看所有结果
print(result)
cursor.close()# 关闭游标
conn.close()# 关闭数据库连接
增删改
import pymysql
conn = pymysql.connect(host="localhost",user="root",password="password",database="db2")# 连接数据库
print(conn)
cursor = conn.cursor()# 获取游标
print(cursor)
username = input("username:")
password = input("password:")
sql = "insert into user(username,password)values(%s,%s);"# SQL
# 不要使用字符拼接,会有SQL注入的风险
print(cursor.execute(sql,(username,password)))# 执行SQL
# cursor.executemany(sql,[("a","123456"),["b","123456"]])# 执行多条语句
conn.commit()# 提交事务,添加,删除,更新必须提交
cursor.close()# 关闭游标
conn.close()# 关闭数据库连接
SQLAlchemy
# 导入:
from sqlalchemy import Column, String, create_engine,Integer,or_,ForeignKey
# 行,字符串类型,创建引擎,整型,或,外键
from sqlalchemy.orm import sessionmaker,relationship
# 创建会话,关系
from sqlalchemy.ext.declarative import declarative_base
# 基类
from sqlalchemy.sql import func
# SQL内置方法(count,avg,sum等)
# 创建对象的基类:
Base = declarative_base()
# 定义User对象:
class UserType(Base):
'''
usertype表
'''
# 表的名字:
__tablename__ = 'usertype'
# 表的结构:
typeid = Column(Integer, primary_key=True,autoincrement=True)
name = Column(String(20))
class User(Base):
'''
user表
'''
# 表的名字:
__tablename__ = 'user'
# 表的结构:
id = Column(Integer, primary_key=True,autoincrement=True)
name = Column(String(20))
typeid = Column(Integer,ForeignKey(UserType.typeid))# 外键
user_type = relationship("UserType",backref="x")# backref 用于反向操作
# relationship写在有foreignkey的表中
def create_db():
'''
创建表
:return:
'''
# 创建所有表
Base.metadata.create_all(engine)
def drop_db():
'''
删除表
:return:
'''
# 删除所有表
Base.metadata.drop_all(engine)
def insert_info(name):
'''
添加方法
:param name:
:return:
'''
# 增
obj1 = User(name=name)# 创建user对象
session.add(obj1)# 插入数据
# session.add_all(obj_list)# 插入多行
def select_info():
'''
查询方法
:return:
'''
# user_info = session.query(User).all() # 查找所有信息,显示所有行,返回的是User对象
# user_info = session.query(User.id).all()# 查找所有信息,显示id,返回的是数据元组
# user_info = session.query(User).filter(User.id>1)# 查找id>1的信息,显示所有行,防寒会的是查询对象,打印为SQL语句
# user_info = session.query(User).filter(User.id>1,User.name=="李四")# 查找id>1 且 name == 李四 的信息,显示所有行,防寒会的是查询对象,打印为SQL语句
# user_info = session.query(User).filter(User.id.between(1,4))# 查找id 为 1-4 的信息,显示所有行
# user_info = session.query(User).filter(~User.id.in_([1,2,4]))# 查找id不为 1 2 4 的信息,显示所有行
# user_info = session.query(User).filter(or_(User.id==1,User.name=="李四"))# 查找id 为 1 或neme==李四的信息,显示所有行
# user_info = session.query(User).filter(User.id.in_(session.query(User.id).filter(User.name=="李四")))# 嵌套查询
# user_info = session.query(User).order_by(User.id.desc()).all() # 排序
# user_info = session.query(User.name,func.count(User.id)).group_by(User.name).all() # 分组统计 返回无命名list
# user_info = session.query(User.name,func.count(User.id)).group_by(User.name).having(func.count(User.id)>1).all() # 分组统计筛选 返回无命名list
# user_info = session.query(User.name,UserType.name).filter(UserType.typeid == User.typeid).all()# 连表查询
user_info = session.query(User.name,UserType.name).outerjoin(UserType)# 连表查询
# # 组合
# q1 = session.query(User)
# q2 = session.query(User)
# user_info = q1.union(q2).all()
# user_info = q1.union_all(q2).all()
# # 子查询
# q1 = session.query(User).subquery()
# user_info = session.query(q1).all()
# # 利用关系连表查询
# user_info = session.query(User)
# print(user_info,type(user_info))
# user_info = user_info.all()
# # 反向利用关系查询
# user_info = session.query(UserType).all()
for row in user_info:
try:
# print(row.id,row.name,row.user_type.name) # 利用关系连表查询
# print(row.typeid,row.name,row.x) # 反向利用关系查询
print(row.id,row.name)
except:
print(row)
def delete_info():
'''
删除方法
:return:
'''
session.query(User).filter(User.id == 4).delete()
def update_info():
'''
更新方法
:return:
'''
session.query(User).filter(User.id == 5).update({"name":"刘六"})# 覆盖修改
# session.query(User).filter(User.id == 5).update({User.name:User.name+"a"},synchronize_session=False)# 添加修改,字符串
# session.query(User).filter(User.id == 5).update({User.id:User.id+1})# 添加修改,数字
if __name__ == '__main__':
# 初始化数据库连接:
engine = create_engine('mysql+pymysql://root:password@localhost:3306/db3',max_overflow=5)
# 创建Session类型:
Session = sessionmaker(bind=engine)
# 实例化
session = Session()
# insert_info("王五")# 添加数据
select_info()
# delete_info()
# update_info()
session.commit()# 提交
session.close()# 关闭连接