python怎么连接数据库

2025-10-19 14:38:28

1、1,将两个docker 连接起来

首先需要搭建环境:

在alpine下面创建mariadb数据库:

https://blog.csdn.net/freewebsys/article/details/53540615

用户名密码是root。

然后创建http的python环境:

https://blog.csdn.net/freewebsys/article/details/53509676

接下来做一个简单数据查询和插入操作。

2、2,python代码:

main.py

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

#!/usr/bin/python

# -*- coding: utf-8 -*-

from flask import Flask

import MySQLdb

app = Flask(__name__)

mysql_host = "mysql"

mysql_user = "root"

mysql_pwd = "root"

mysql_db_name = "demo"

"""

CREATE DATABASE `demo` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE TABLE `demo`.`user_info` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`name` varchar(200) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

"""

def query_db(sql):

    db = MySQLdb.connect(mysql_host, mysql_user, mysql_pwd, mysql_db_name)

    cur = db.cursor()

    try:

        cur.execute(sql)

        result = cur.fetchall()

    except:

        print("error: sql:" + sql)

    cur.close()

    db.close()

    return result

def update_db(sql):

    print(sql)

    db = MySQLdb.connect(mysql_host, mysql_user, mysql_pwd, mysql_db_name)

    cur = db.cursor()

    try:

        cur.execute(sql)

    except:

        print("error: sql:" + sql)

    db.commit()

    cur.close()

    db.close()

 

@app.route("/list")

def list():

    results = query_db(" select id,name from `demo`.`user_info` ")

    out = "results:\n"

    for result in results:

        id = result[0]

        name = result[1]

        out += "id:" + str(id) + ",name:" + name +"\n"

    return out

@app.route("/add")

def add():

    sql = " insert ignore into `demo`.`user_info`(`name` ) values ('zhangsan') "

    update_db(sql)

    return "ok"

if __name__ == "__main__":

    app.run(host='0.0.0.0', port=5000)

代码和之前的http没有太大区别,只是增加了数据库的查询和插入操作。

一共就有两个url,一个list,查询全部数据,一个add,写死增加。

3、创建数据库表

mysql需要创建下数据库和表:

?

1

2

3

4

5

6

CREATE DATABASE `demo` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE TABLE `demo`.`user_info` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`name` varchar(200) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

这个user_info表一共就有两个字段,一个id自增,一个是name字符串的。

当然这个数据库不在本地,是另外的一个docker 容器。

http在一个容器上面。

4、4,使用link连接起来

数据创建名称叫mariadb。

跑http。

?

1

docker run -d -p 5000:5000 --name py-http --link mariadb:mysql demo/py-http:1.0

特别注意这里的–link 容器名:昵称,然后对于py-http容器来说mysql就是昵称了。

可以直接看下evn环境:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

# docker exec -it py-http bash

bash-4.3# env

HOSTNAME=db7f7aba7c2f

MYSQL_ENV_MYSQL_ROOT_PASSWORD=root

MYSQL_ENV_MARIADB_VERSION=10.1.19+maria-1~jessie

MYSQL_ENV_GOSU_VERSION=1.7

MYSQL_PORT_3306_TCP_PORT=3306

MYSQL_ENV_MARIADB_MAJOR=10.1

MYSQL_PORT_3306_TCP=tcp://172.17.0.2:3306

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

PWD=/

TZ=Asia/Shanghai

SHLVL=1

HOME=/root

MYSQL_NAME=/py-http/mysql

MYSQL_PORT_3306_TCP_PROTO=tcp

MYSQL_PORT_3306_TCP_ADDR=172.17.0.2

MYSQL_PORT=tcp://172.17.0.2:3306

_=/usr/bin/env

可以看到,在py-http容器下面已经把mariadb容器的环境变量直接引入了。并且查看hosts:

?

1

2

3

4

5

6

7

8

9

# cat /etc/hosts

127.0.0.1       localhost

::1     localhost ip6-localhost ip6-loopback

fe00::0 ip6-localnet

ff00::0 ip6-mcastprefix

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters

172.17.0.2      mysql 48bd5fbf3ddc mariadb

172.17.0.3      db7f7aba7c2f

可以看到有了mysql变量的host了。在外部访问:就说明测试成功。数据库能插入查询了。

?

1

2

3

4

5

# curl https://127.0.0.1:5000/add

ok[root@localhost http]# curl https://127.0.0.1:5000/list

results:

id:1,name:zhangsan

id:2,name:zhangsan

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢