zoukankan      html  css  js  c++  java
  • python如何用sqlalchemy操作数据库

    工具:mysql  python sqlalchemy

    ----------------------------------------

    准备工作:

    1.安装mysql

    如果是window环境请参考 win7安装mysql

    如果是linux环境请参考 linux安装mysql

    2.安装python

    windows: win7安装python2和python3

    linux: linux安装python36

    注:CentOS自带python2.6.6,如果要安装2.7.9以后的版本同样要通过源码包安装

    转载dudu博主的linux安装python2.7.9

    3.基于python安装第三方库pymysql和sqlalchemy

    pip install pymysql
    pip install sqlalchemy
    
    pip3 install pymysql
    pip3 install sqlalchemy

    --------------------------------------------------------------------------

    可以开始撸码了~~~~~~

    我是基于python36写的,话不多说直接上代码吧

    • 第一步:用mysql创建数据库

    • 第二步:创建数据库连接
    # encoding:utf-8
    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, INTEGER, String
    from sqlalchemy.orm import sessionmaker
    HOST_NAME = '127.0.0.1'     # 数据库所在服务器ip,因为我是本地数据库所以这里是127.0.0.1
    HOST_PORT = '3306'          # 数据库端口
    DATABASE_NAME = 'pydb'      # 数据库名
    USER_NAME = 'root'          # 链接数据的用户名
    PWD = '123456'              # 链接数据库的密码
    # DB_URI是固定的格式,因为我的数据库是mysql,所以按照这个格式写就行了
    DB_URI = 'mysql+pymysql://{0}:{1}@{2}:{3}/{4}?charset=utf8'.format(USER_NAME,PWD,HOST_NAME,HOST_PORT,DATABASE_NAME)
    # 创建数据库连接
    engine = create_engine(DB_URI)
    •  第三步: 创建表
    # -------------创建数据库--------------------------------------------------------------------------------
    # 操作数据库的基类
    Base = declarative_base(engine)
    
    
    class User(Base):
        """定义类其实就是创建一个表
        create table user (
        id int primary key auto_increment,
        user_name varchar(50) not null,
        password varchar(20) default '123456'
        );
        """
        __tablename__ = 'user'  # 表名
        id = Column(INTEGER,primary_key=True, autoincrement=True)   # id字段,主键,自增
        user_name = Column(String(50), nullable=False)  # 用户名字段
        password = Column(String(20), nullable=False, default='123456') # 密码字段
    
        def __repr__(self):
            """定义数据库查询返回的数据格式"""
            return 'User(id="%s",username="%s",password="%s")' % (self.id, self.user_name,self.password)
    
    
    Base.metadata.create_all()

    查看数据库,创建成功

    •  第四步: 插入数据
     1 # ------------插入数据---------------------------------------------------------------------
     2 # 创建会话
     3 Session = sessionmaker(engine)
     4 session = Session()
     5 panda = User(user_name='panda', password='123456')
     6 # 插入单条数据
     7 session.add(panda)
     8 user_list = []
     9 # 插入多条数据
    10 user_list.append(User(user_name='test1', password='11111111'))
    11 user_list.append(User(user_name='test2', password='22222222'))
    12 user_list.append(User(user_name='test3', password='33333333'))
    13 session.add_all(user_list)
    14 session.commit()

    查看数据库已经添加成功

    • 第五步:查询数据
    # select top 1 from user;
    res_first = session.query(User).first()
    print(res_first)
    # select *from user;
    res_all = session.query(User).all()
    print(res_all)
    # select *from user where user_name='panda';
    res_panda = session.query(User).filter_by(user_name='panda').all()
    print(res_panda)
    # select *from user where user_name='panda';
    res = session.query(User).filter(User.user_name == 'panda').all()
    print(res)

    运行结果如下,这里返回的格式是以class类的__repr__方法定义的

    • 第六步: 更新数据
    # update user set password = '654321' where user_name='panda';
    res = session.query(User).filter(User.user_name == 'panda').all()[0]
    res.password = '654321'
    session.commit()

    查看数据库已经更新成功

    • 第七步: 删除数据
    # delete from user where id=3;
    res = session.query(User).filter_by(user_name='test3').all()[0]
    session.delete(res)
    session.commit()

    查看数据库已经删除成功

     
  • 相关阅读:
    “增绿”——气候变化减排之外中国提出新方法
    当资本遇见万科章程
    [转]最简单实现跨域的方法:用 Nginx 反向代理
    活在雾霾下
    为石墨烯弄套产业政策?且慢!
    2016年的A股变数:IPO重启、注册制与国企改革
    被指“造假” 京东喊冤 到底谁在卖“真褚橙”?
    在管理教练与管理之间寻找平衡
    聪明的CEO如何将战略付诸执行
    苹果公司如何推动整个产业的前进
  • 原文地址:https://www.cnblogs.com/smileyes/p/7220175.html
Copyright © 2011-2022 走看看