Home > Database > Mysql Tutorial > How to connect to Mysql database remotely using Python based on ssh

How to connect to Mysql database remotely using Python based on ssh

WBOY
Release: 2023-05-27 16:07:13
forward
1362 people have browsed it

Background

If you need to access the Mysql database of the remote server, but for the security period of the Mysql database, the security measures are set to only allow local connections (that is, you need to log in to the server to use it), otherwise Remote connections cannot be accessed directly, and the corresponding port has been modified, so you need to connect to the database based on ssh. The method of connecting to the database is similar to the interface connection in Navicat through SSH.

How to connect to Mysql database remotely using Python based on ssh

Navicat

How to connect to Mysql database remotely using Python based on ssh

Connect to database

Install support library

  • If you want to connect to Mysql, you first need to install pymysql

pip install pymysql
Copy after login
  • Install the ssh-based library sshtunnel

pip install sshtunnel    #当前最新 0.3.1版
Copy after login

It is recommended to install the latest sshtunnel library. The old version library has some bugs

Connecting to Mysql

Connecting Mysql based on ssh can check the sshtunnel documentation, which contains some cases

with SSHTunnelForwarder(
        ('192.168.1.1', 2222),
        ssh_password='123456',
        ssh_username='root',
        remote_bind_address=('127.0.0.1', 3306)) as server:
    print('SSH连接成功')
    conn = pymysql.connect(host='127.0.0.1',
                           port=server.local_bind_port,
                           user='root',
                           database='data',
                           charset='utf8')
    print('mysql数据库连接成功')
    cursor = conn.cursor()
    ...  #获取数据操作,此处省略
    cursor.close()
    conn.close()
Copy after login

Since Define query function

You can encapsulate the above connection into a function to facilitate use in other places

def mysql_ssh(sql,args=None):
    with SSHTunnelForwarder(
            ('192.168.1.1', 2222),
            ssh_password='123456',
            ssh_username='root',
            remote_bind_address=('127.0.0.1', 3306)) as server:
        print('SSH连接成功')
        conn = pymysql.connect(host='127.0.0.1',
                               port=server.local_bind_port,
                               user='root',
                               database='data',
                               charset='utf8')
        print('mysql数据库连接成功')
        cursor = conn.cursor()
        print('游标获取成功')
        try:
            print(f'执行查询语句:{sql}  参数:{args}')
            cursor.execute(sql,args)
            print('数据查询成功')
            conn.commit()
            print('事务提交成功')
            datas = cursor.fetchall()
            success = True
        except:
            print('数据查询失败')
            datas = None
            success = False
        print('正在关闭数据库连接')
        cursor.close()
        conn.close()
    return datas, success
Copy after login

Notes:

  • When using the database, conn.commit(), cursor.close(), conn.close() must be used in a standardized manner to prevent inaccuracies. Necessary bug

  • It is recommended to use this method when passing in parameterscursor.execute(sql,args) to prevent the risk of sql injection

The above is the detailed content of How to connect to Mysql database remotely using Python based on ssh. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:yisu.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template