sqlalchemy数据库连接的简单测试

sqlalchemy的mysql连接的问题:
先看一个demo:

from sqlalchemy.engine import create_engine
from sqlalchemy.orm import sessionmaker

DB_MYSQL_USER = '***'
DB_MYSQL_PASSWD = '***'
DB_MYSQL_HOST = '***'
DB_MYSQL_PORT = 3306
DB_MYSQL_DB = 'raas'
DB_MYSQL_CHARSET = 'utf8'

SQLALCHEMY_DATABASE_URI_MYSQL = 'mysql+mysqldb://%s:%s@%s:%s/%s?charset=%s' % (
    DB_MYSQL_USER, DB_MYSQL_PASSWD, DB_MYSQL_HOST, DB_MYSQL_PORT, DB_MYSQL_DB, DB_MYSQL_CHARSET)

engine = create_engine(SQLALCHEMY_DATABASE_URI_MYSQL, echo=False, pool_size=1, max_overflow=0)  # 连接池大小设置为1,即只允许一个连接,第二个连接会一直等待;
Session = sessionmaker(bind=engine, autocommit=False)


def conn_to_db():
    conn = Session()
    res = conn.query(JobInfo).all()  # 此处JobInfo可以为任意表,只要能触发连接数据库的动作就行
    conn.commit()
    print(res)

    conn = Session()
    res = conn.query(ApsJobInfo).all()
    print(res)
    conn.commit()

    conn = Session()
    res = conn.query(ApsJobInfo).all()
    print(res)
    conn.commit()

    conn = Session()
    res = conn.query(ApsJobInfo).all()
    print(res)
    conn.commit()

    conn = Session()
    res = conn.query(ApsJobInfo).all()
    print(res)
    conn.commit()

    time.sleep(5)
conn_to_db()

case 1: 运行过程中,查询mysql连接数,发现:运行正常,说明commit动作会自动断开连接,下一个conn对象才能够正常执行;

case 2:屏蔽掉所有conn.commit():
结果:只获取到一次查询结果,其余全block了

case3:用conn.close()代替conn.commit():
结果:程序正常执行

case4:修改sqlalchemy引擎配置,配置连接池为10:
结果:正常执行

结论:
要么复杂逻辑中注意减少数据库连接数量,要么逻辑中及时close不再需要的连接,要么autocommit……(另外,可以把close动作丢到类的魔法方法:__del__中,实例化对象回收之时就自动释放)

该测试没啥技术含量,只是想说,以前没关注过mysql连接数的问题,直到最近项目在连测试库测试时,出现了tornado占用很多数据库连接、导致数据库异常。回头要想办法优化一下,避免生产上埋雷。

要使用SQL Alchemy连接数据库,首先需要手动创建一个名为"sqlalchemy"的数据库。可以使用以下代码来创建数据库: CREATE DATABASE IF NOT EXISTS sqlalchemy CHARACTER SET UTF8; 接下来,我们可以使用SQL Alchemy来连接数据库。可以使用以下代码来创建一个Engine连接MySQL数据库: ``` from sqlalchemy import create_engine # 创建Engine连接MySQL数据库 url = "mysql+mysqldb://sa:jZ3FPwfwz8phiSzA@127.0.0.1:3306/sqlalchemy?charset=utf8" engine = create_engine(url=url, echo=True, future=True) ``` 请注意,上述代码中的用户名为"sa",密码为"jZ3FPwfwz8phiSzA",数据库地址为"127.0.0.1",端口为"3306",数据库名称为"sqlalchemy"。根据实际情况修改这些参数。 最后,为了测试是否成功连接到数据库,可以使用以下代码: ``` from sqlalchemy import create_engine from sqlalchemy import text # 连接数据库 url = "mysql+mysqldb://sa:jZ3FPwfwz8phiSzA@127.0.0.1:3306/sqlalchemy?charset=utf8" engine = create_engine(url=url, echo=True, future=True) # 测试连接是否成功 with engine.connect() as conn: result = conn.execute(text("select 'hello world'")) print(result.all()) ``` 运行上述代码后,如果输出结果为"hello world",则表示成功连接到数据库。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SQL Alchemy连接数据库](https://blog.csdn.net/zy010101/article/details/124789297)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值