Python MySql

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()# 关闭连接
posted @ 2019-11-30 10:41  长江尾  阅读(246)  评论(0编辑  收藏  举报