zoukankan      html  css  js  c++  java
  • Python MySql

    [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()# 关闭连接
    
  • 相关阅读:
    List分组和排序
    IOS 可靠性测试 iosMonkey
    Mac 10.10 下安装jdk 1.7 以上
    Ubuntu 无法拖拽复制
    Ubuntu 环境安装整理
    vmware 中 ubuntu linux 安装vmware tools
    Vmware linux 安装 Vmware Tools 提示只读
    Ubuntu_文件夹名字转化成英文
    Ubuntu_开启root 登陆
    Tomcat 用户配置
  • 原文地址:https://www.cnblogs.com/changjiangwei/p/11945098.html
Copyright © 2011-2022 走看看