面面观 | 使用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:\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

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[[email protected] http]# curl http://127.0.0.1:5000/list

results:

id:1,name:zhangsan

id:2,name:zhangsan

4,总结

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

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

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

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

新智云官网www.enncloud.cn

时间: 2024-10-19 05:06:25

面面观 | 使用python 连接数据库,插入并查询数据--link的相关文章

HDU 5349 动态插入删除查询数据-multiset

题意:动态的插入删除查询数据,允许数据重复 分析:一看就是个multiset,直接做.STL大法好. 代码: #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<vector> #include<set> using namespace std; int n; int a; multiset<int> s; i

C#链接SQLServer实现插入和查询数据源代码

数据的查询: private void FullTab() {         SqlConnection con1 = new SqlConnection();//创建数据库库链接             try             {                 String con = "server=.;database=common_wjdl;uid=sa;pwd=db2008mima";//定义数据库连接信息                 con1.Connect

easyui-datagrid连接数据库实现分页查询数据

一.利用MVC思想建立底层数据库: package com.hanqi.dao; import java.util.ArrayList; import java.util.List; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.boot.registry.StandardServiceRegistr

python 连接数据库,查询结果写入数据到excel

使用Python链接数据库查询数据,并将查询结果写入到Excel中,实现方法上主要有两步,第一,查数据,第二,写Excel. 一.导入需要的包 import time import xlwt from commontool import dbtool import os 二.查数据,并返回查询结果 查询数据传入指定日期,使用指定日期在数据库中查询该日期区间的交易.因为传入的日期为字符串,第一步需要将传入的字符串转换成时间数组,第二步再将传入的日期转换成自己想要的时间格式. class write

在python中连接mysql和查询数据

1 连接mysql import pymysql.cursors# 导入pymysql包# 连接数据库 connection = pymysql.connect(host = "localhost", #host是要连接的数据库的IP地址 user = "eric", #user是登陆的账号名,root是最高权限账号 password = "123456", #user账号的密码 db = "45", #需要连接的数据库 ch

JDBC连接数据库方法的封装,以及查询数据方法的封装(精华)

主要内容: 一般的连接数据库测试 把连接数据库的方法封装成一个类和测试 一个简单的插入表实例 查询数据实例 封装查询的数据库的信息 封装信息后的查询数据库 一.一般的数据库连接测试 1 public class TestConnection1 { 2 public static void main(String[] args) throws Exception { 3 Class.forName("com.mysql.jdbc.Driver"); 4 String url="

Python版的数据库查询构造器、ORM及动态迁移数据表。

Orator Orator提供一个简单和方便的数据库数据处理库. 它的灵感来源于PHP的Laravel框架,借助其思想实现了python版的查询构造器和ORM. 这是完整的文档:http://orator-orm.com/docs 安装 你可以有两种不同的安装方式. 使用pip安装. pip install orator 使用官方的源码安装(https://github.com/sdispater/orator) 基本使用 配置 你需要开始配置数据库连接,及创建一个DatabaseManager

利用python 实现快速插入300万行数据

需求:mysql怎么快速插入300万行数据?(效率要高) 分析:(1)使用pymysql多行插入(提高效率)         (2)使用python协程(遇到I/O操作就切换任务,无需等待--提高效率) 写代码之前的准备工作: 创建db20数据库,创建userinfo表 mysql> create database db20; Query OK, 1 row affected (0.00 sec) mysql> use db20; Database changed mysql> crea

Python通过pymysql连接数据库并进行查询和更新SQL方法封装

1.通过pymysql连接数据库并进行数据库操作2.查询数据3.更新修改SQL方法封装 import pymysql.cursors import json class OperationMysql: def __init__(self): self.conn = pymysql.connect( host='127.0.0.1', port=3306, user='test', passwd='11111', db='test', charset='utf8', cursorclass=pym