zoukankan      html  css  js  c++  java
  • 面面观 | 使用python 连接数据库,插入并查询数据--link

    1,将两个docker 连接起来

    首先需要搭建环境: 

    在alpine下面创建mariadb数据库: 

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

    用户名密码是root。 

    然后创建http的Python环境: 

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

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

    2,python代码:

    main.py

    #!/usr/bin/python# -*- coding: utf-8 -*-from flask import Flaskimport 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 resultdef 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: "    for result in results:        id = result[0]        name = result[1]        out += "id:" + str(id) + ",name:" + name +" "    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需要创建下数据库和表:


    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,使用link连接起来

    数据创建名称叫mariadb。 

    跑http。

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

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

    可以直接看下evn环境:

    # docker exec -it py-http

    bashbash-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=1HOME=/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:

    # 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了。 

    在外部访问:就说明测试成功。数据库能插入查询了。

    # curl http://127.0.0.1:5000/add

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

    results:

    id:1,name:zhangsan

    id:2,name:zhangsan

    4,总结

    docker设计的挺好的,每一个容器虽然独立,但是还可以连接起来。 

    这样组成一个微服务的集群。通过环境变量,把代码和环境分离。 

    保证测试环境,开发环境,线上环境的的一致。 

    极大的方便了开发运维,link 命令也非常好使。

     新智云官网www.enncloud.cn

  • 相关阅读:
    OK335xS-Android mkmmc-android-ubifs.sh hacking
    OK335xS-Android pack-ubi-256M.sh hacking
    OK335xS Ubuntu 12.04.1 版本 Android 开发环境搭建
    Qt Quick Hello World hacking
    Qt QML referenceexamples attached Demo hacking
    QT 5.4.1 for Android Ubuntu QtWebView Demo
    I.MX6 working note for high efficiency
    QT 5.4.1 for Android Windows环境搭建
    mkbootimg hacking
    Generate And Play A Tone In Android hacking
  • 原文地址:https://www.cnblogs.com/enncloudcn/p/6934706.html
Copyright © 2011-2022 走看看