本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/53589604 未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys

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 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 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:\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需要创建下数据库和表:

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 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:

# 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,总结


本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/53589604 未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys

docker设计的挺好的,每一个容器虽然独立,但是还可以连接起来。
这样组成一个微服务的集群。通过环境变量,把代码和环境分离。
保证测试环境,开发环境,线上环境的的一致。
极大的方便了开发运维,link 命令也非常好使。

docker(7):使用python 连接数据库,插入并查询数据--link相关推荐

  1. pythonmysql查询转list_使用Python将Mysql的查询数据导出到文件的方法

    mysql官方提供了很多种connector,其中包括python的connector. 下载地址在:http://dev.mysql.com/downloads/connector/python/ ...

  2. python 操作mysql数据库查询数据

    在Windows平台上安装mysql模块用于Python开发 用python连接mysql的时候,需要用的安装版本,源码版本容易有错误提示.下边是打包了32与64版本. MySQL-python-1. ...

  3. elasticsearch 版本 6.6 插入和查询数据

    1. 引入POM文件 <dependencyManagement> <dependencies> <!-- es 查询 --><dependency>& ...

  4. python 基础 9.9 查询数据

    #/usr/bin/python #-*- coding:utf-8 -*- #@Time   :2017/11/24 4:21 #@Auther :liuzhenchuan #@File   :查询 ...

  5. python mongodb根据_id查询数据

    根据_id查询数据代码如下 from bson.objectid import ObjectId articles.find_one({'_id':ObjectId('50f0d76347f4ec14 ...

  6. python怎么连接数据库并且查看数据是否存在_如何使用python连接数据库,插入并查询数据...

    展开全部 在 Python 语言环境下我们这样连接数据e5a48de588b662616964757a686964616f31333433653434库. In [1]: from mysql imp ...

  7. python 数据库查询系统,python连接数据库后怎样查询

    Python查询Mysql使用fetchone()方法获取单条数据,使用fetchall()方法获取多条数据. fetchone():该方法获取下一个查询结果集.结果集是一个对象 fetchall() ...

  8. python 连接数据库并批量生成数据

    自己在电脑上搭建了一个数据库,并用Python连接了一下,因为是刚搭建的,没有数据,就通过py生成了一些数据,写的比较粗糙.勿喷!废话不多说上代码! import pymysql # 导入mysql库 ...

  9. .NET Elasticsearch教程:使用NEST插入、查询数据

    NEST是.NET下使用Elasticsearch的高层客户端程序,对Elasticsearch进行了很多封装,支持DSL强类型查询. 下面是.NET CORE的一个简单示例 1.新建一个 .Net ...

最新文章

  1. 入链、出链、反向链接、内链、外链的关系
  2. aws lambda_通过Spring将AWS SQS用作JMS提供程序
  3. 决策树ID3 C4.5 CART代码
  4. CentOS 搭建内部Yum源同步阿里Yum源
  5. python3.7代码_Centos7源代码安装python3.7,centos7,源码,python37
  6. 栈windows linux,Linux+Windows: 程序崩溃时,在 C++ 代码中,如何获取函数调用栈信息...
  7. 整合基因组学和蛋白质结构的致病机制分析
  8. c语言猜拳游戏实验报告,《猜拳小游戏》--一个c语言写的小项目
  9. mysql配置环境变量,进阶加薪全靠它!
  10. Android java获取行号和函数名
  11. 员工年终绩效考核表模板
  12. 在网站优化中怎么做好关键词密度?
  13. 沈阳农业大学计算机专业排名,沈阳农业大学王牌专业排名
  14. bluedroid acl 发送和接受
  15. html页面日期显示带0,XHTML1.0与HTML兼容指引16条 小结
  16. linux dd copy all partitions,dd 命令详解
  17. 年终盘点丨细数2017云栖社区20大热点话题(附100+话题清单)
  18. HttpClient实战爬虫B站番剧
  19. 行业研究-全球与中国音乐可视化软件市场现状及未来发展趋势
  20. 论文笔记010:[CVPR2019]VERI-Wild: A Large Dataset and a New Method for Vehicle Re-Identification in the W

热门文章

  1. 在一个软件开发项目中进行实际日程安排的十二点提示(转)
  2. 从IBM和SUN分析当前SOA公司现状
  3. Apache不支持加密的密钥
  4. 数字证书转换cer---pem
  5. URL编码 URLEncoder 示例
  6. Java版 微信红包算法
  7. FXForms,自动生成iOS表单
  8. 查看MySQL数据库中每个表占用的空间大小
  9. “找不到网络路径”的检测方法及解决方案
  10. Oracle之自动收集统计信息