docker(7):使用python 连接数据库,插入并查询数据--link
2016-12-12 22:21
1001 查看
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/53589604 未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys
在alpine下面创建mariadb数据库:
http://blog.csdn.net/freewebsys/article/details/53540615
用户名密码是root。
然后创建http的python环境:
http://blog.csdn.net/freewebsys/article/details/53509676
接下来做一个简单数据查询和插入操作。
代码和之前的http没有太大区别,只是增加了数据库的查询和插入操作。
一共就有两个url,一个list,查询全部数据,一个add,写死增加。
这个user_info表一共就有两个字段,一个id自增,一个是name字符串的。
当然这个数据库不在本地,是另外的一个docker 容器。
http在一个容器上面。
跑http。
特别注意这里的–link 容器名:昵称,然后对于py-http容器来说mysql就是昵称了。
可以直接看下evn环境:
可以看到,在py-http容器下面已经把mariadb容器的环境变量直接引入了。
并且查看hosts:
可以看到有了mysql变量的host了。
在外部访问:就说明测试成功。数据库能插入查询了。
博主地址是:http://blog.csdn.net/freewebsys
docker设计的挺好的,每一个容器虽然独立,但是还可以连接起来。
这样组成一个微服务的集群。通过环境变量,把代码和环境分离。
保证测试环境,开发环境,线上环境的的一致。
极大的方便了开发运维,link 命令也非常好使。
博主地址是: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 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需要创建下数据库和表: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 命令也非常好使。
相关文章推荐
- 面面观 | 使用python 连接数据库,插入并查询数据--link
- python连接数据库并插入数据
- 数据库连接,查询和插入数据的方法
- java JDBC 连接数据库查询数据与直接使用sql的疑问
- Java连接HBASE数据库,创建一个表,删除一张表,修改表,输出插入,修改,数据删除,数据获取,显示表信息,过滤查询,分页查询,地理hash
- mysql创建数据库,创建数据库表导入xlsx、txt文本,查询、删除、插入数据语句的使用
- 数据库中插入数据后,使用命令行可以查到数据,程序连接查不到
- oracle 数据库的管理工具 PL/SQL_Developer 的简易使用 与Java 连接并查询显示出数据
- javaWeb使用servlet并且连接数据库向数据库插入数据
- Yii 1.1.17 三、数据库连接、定义模型、数据查询、验证登录、SESSION使用与URL生成
- 使用PDO连接数据库 查询和插入乱码的解决方法
- MFC中使用sqlite3操作数据库 创建,插入数据,查询数据
- JDBC 数据库连接 创建表格、插入、查询、删除、修改数据 基本操作
- 使用PDO连接数据库 查询和插入乱码的解决方法
- Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
- python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
- java使用JDBC连接数据库,提高查询大量数据速度
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce