python 使用SQLAlchemy 管理mysql数据库(未完)

本文介绍了如何使用SQLAlchemy这个ORM工具管理MySQL数据库,包括安装数据库、设置远程登录、安装SQLAlchemy、修改编码、安装驱动,以及如何初始化数据库连接、创建Engine、设置连接池参数。还讲解了创建对象基类、映射数据库表、操作会话和执行SQL的步骤。
摘要由CSDN通过智能技术生成

 

 

 

  1. 安装mysql数据库
  2. 修改mysql,使得可远程登录
  3. -- 修改mysql服务器的mysql数据库的 user 表中的 host字段
    update user set host = '%' where user = 'root';
    FLUSH RIVILEGES
    
    
    
    alter user 'root'@'%' identified with mysql_native_password by '[密码]';
    flush privileges;

     

  4. 使用ORM (Object Relational Mapping 关系对象映射) 的方式管理数据库,SQLAlchemy 是ORM的工具
  5. 安装 SQLAIchemy 
  6. $ sudo apt-get update
    $ sudo pip3 install sqlalchemy

     

  7. 将MySQL默认的编码改为utf-8 
  8. $ sudo vim /etc/mysql/my.cnf
    
    
    # 打开文件后添加如下配置
    [client]
    default-character-set = utf8
    
    [mysqld]
    character-set-server = utf8
    
    [mysql]
    default-character-set = utf8
  9.  安装python与mysql连接的驱动程序 
  10. $ sudo pip3 install pymysql

     

  11.  导入pymysql 并用 pymysql代替 MySQLdb模块
    import pymysql
    pymysql.install_as_MySQLdb()

     

  12.  初始化数据库连接,并获取连接数据库的连接引擎engine
    engine = create_engine('mysql+mysqldb://root:root@localhost:3306/testdb?charset=utf8',
                           isolation_level='READ UNCOMMITTED', #定义事务约束条件
                           echo=False,  # 不打印SQL语句
                            pool_size = 30, # 定义连接池大小
                            pool_recycle=7200。# 定义连接时长为2小时
                            ) 

    SQLAlchemy 是通过 Engine 来驱动,Engine 维护了一个连接池(Pool)对象和方言(Dialect),方言简单而言就是你连的到底是 MySQL 还是 Oracle 或者 PostgreSQL 还是其它数据库。连接池很重要,因为每次发送sql查询的时候都需要先建立连接,如果程序启动的时候事先就初始化一批连接放在连接池,每次用完后又放回连接池给其它请求使用,就能大大提高查询的效率

    通过函数 create_engine 就可以创建连接引擎engine
    构建好 Engine 对象的同时,连接池和Dialect也创建好了,但是这时候并不会立马与数据库建立真正的连接,只有你调用 Engine.connect() 或者 Engine.execute(sql) 执行SQL请求的时候,才会建立真正的连接。因此 Engine 和 Pool 的行为称之为延迟初始化。
    echo :为 True 时候会把sql语句打印出来
    pool_size: 是连接池的大小,默认为5个,0表示连接数无限制
    pool_recycle: MySQL 默认情况下如果一个连接8小时内容没有任何动作(查询请求)就会自动断开链接,出现 MySQL has gone away的错误。设置了 pool_recycle 后 SQLAlchemy 就会在指定时间内回收连接。如果设置为3600 就表示 1小时后该连接会被自动回收。
    pool_pre_ping : 这是1.2新增的参数,如果值为True,那么每次从连接池中拿连接的时候,都会向数据库发送一个类似 select 1 的测试查询语句来判断服务器是否正常运行。当该连接出现 disconnect 的情况时,该连接连同pool中的其它连接都会被回收。

  13. 创建对象基类
    Base = declarative_base()
     
  14.  定义与数据库中表相对应的类
    class Test(Base):
        """ 描述信息
        """
        
        __tablename__ = 'test_table'
        
        nameId = Column(String(30), primary_key=True)
        name = Column(String(30),unique=True)
        # ...

     

  15. 实施建表操作,完成类与表的映射
    Base.metadata.create_all(engine)

     

  16. 创建会话类
    Session = sessionmaker(bind=engine)
     
  17.  创建会话类对象
    session = Session()

     

  18.  业务逻辑操作,执行SQL语句



     
  19. 执行提交操作,将操作保持到数据库
    session.commit()
      
  20. 关闭会话对象
    session.close()

     

  21.  

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值