From f3e47d456a9d9e64ebae9d63c0995cbce934a87f Mon Sep 17 00:00:00 2001 From: wenxiaoning Date: Thu, 25 Jan 2018 18:08:55 +0800 Subject: [PATCH] add-flask-sql --- java/SpringBoot-JPA/pom.xml | 6 +- java/TMD/.vim/source | 8 ++ java/TMD/TMD.iml | 85 ++++++++++++++++ java/TMD/pom.xml | 57 +++++++++++ .../java/com/wxnacy/spring/Application.java | 18 ++++ .../com/wxnacy/spring/UserController.java | 72 ++++++++++++++ .../com/wxnacy/spring/UserRepository.java | 9 ++ .../java/com/wxnacy/spring/bean/Screen.java | 84 ++++++++++++++++ .../java/com/wxnacy/spring/bean/Shop.java | 43 ++++++++ .../java/com/wxnacy/spring/bean/User.java | 45 +++++++++ .../spring/controller/ScreenController.java | 47 +++++++++ .../spring/repository/BaseRepository.java | 13 +++ .../spring/repository/ScreenRepository.java | 9 ++ .../src/main/resources/application.properties | 5 + python/flask_sqlalchemy_demo/requirements.txt | 8 ++ python/flask_sqlalchemy_demo/run.py | 51 ++++++++++ python/requirements.txt | 2 + python/simple/my_sqlalchemy.py | 97 +++++++++++++++++++ python/simple/scheduler.py | 20 ++++ 19 files changed, 676 insertions(+), 3 deletions(-) create mode 100644 java/TMD/.vim/source create mode 100644 java/TMD/TMD.iml create mode 100644 java/TMD/pom.xml create mode 100644 java/TMD/src/main/java/com/wxnacy/spring/Application.java create mode 100644 java/TMD/src/main/java/com/wxnacy/spring/UserController.java create mode 100644 java/TMD/src/main/java/com/wxnacy/spring/UserRepository.java create mode 100644 java/TMD/src/main/java/com/wxnacy/spring/bean/Screen.java create mode 100644 java/TMD/src/main/java/com/wxnacy/spring/bean/Shop.java create mode 100644 java/TMD/src/main/java/com/wxnacy/spring/bean/User.java create mode 100644 java/TMD/src/main/java/com/wxnacy/spring/controller/ScreenController.java create mode 100644 java/TMD/src/main/java/com/wxnacy/spring/repository/BaseRepository.java create mode 100644 java/TMD/src/main/java/com/wxnacy/spring/repository/ScreenRepository.java create mode 100644 java/TMD/src/main/resources/application.properties create mode 100644 python/flask_sqlalchemy_demo/requirements.txt create mode 100644 python/flask_sqlalchemy_demo/run.py create mode 100644 python/requirements.txt create mode 100644 python/simple/my_sqlalchemy.py create mode 100644 python/simple/scheduler.py diff --git a/java/SpringBoot-JPA/pom.xml b/java/SpringBoot-JPA/pom.xml index 514ef22..ab989b7 100644 --- a/java/SpringBoot-JPA/pom.xml +++ b/java/SpringBoot-JPA/pom.xml @@ -27,9 +27,9 @@ test - mysql - mysql-connector-java - + mysql + mysql-connector-java + 1.8 diff --git a/java/TMD/.vim/source b/java/TMD/.vim/source new file mode 100644 index 0000000..981bcd1 --- /dev/null +++ b/java/TMD/.vim/source @@ -0,0 +1,8 @@ + +src/main/java/com/wxnacy/spring/Application.java +src/main/java/com/wxnacy/spring/UserController.java +src/main/java/com/wxnacy/spring/UserRepository.java +src/main/java/com/wxnacy/spring/bean/Screen.java +src/main/java/com/wxnacy/spring/bean/User.java +src/main/java/com/wxnacy/spring/controller/ScreenController.java +src/main/java/com/wxnacy/spring/repository/ScreenRepository.java diff --git a/java/TMD/TMD.iml b/java/TMD/TMD.iml new file mode 100644 index 0000000..c07297e --- /dev/null +++ b/java/TMD/TMD.iml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/java/TMD/pom.xml b/java/TMD/pom.xml new file mode 100644 index 0000000..b08df2d --- /dev/null +++ b/java/TMD/pom.xml @@ -0,0 +1,57 @@ + + 4.0.0 + com.wxnacy.spring + TMD + jar + 1.0-SNAPSHOT + TMD + http://maven.apache.org + + org.springframework.boot + spring-boot-starter-parent + 1.5.9.RELEASE + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.boot + spring-boot-devtools + true + + + mysql + mysql-connector-java + + + + 1.8 + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + + + + + + diff --git a/java/TMD/src/main/java/com/wxnacy/spring/Application.java b/java/TMD/src/main/java/com/wxnacy/spring/Application.java new file mode 100644 index 0000000..31fe7e1 --- /dev/null +++ b/java/TMD/src/main/java/com/wxnacy/spring/Application.java @@ -0,0 +1,18 @@ +package com.wxnacy.spring; + +import java.util.Arrays; + +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + +} diff --git a/java/TMD/src/main/java/com/wxnacy/spring/UserController.java b/java/TMD/src/main/java/com/wxnacy/spring/UserController.java new file mode 100644 index 0000000..dc86ea8 --- /dev/null +++ b/java/TMD/src/main/java/com/wxnacy/spring/UserController.java @@ -0,0 +1,72 @@ +package com.wxnacy.spring; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class UserController { + + @Autowired + private UserRepository userRepository; + + @GetMapping("/user") + public List users( + @RequestParam(required=false, defaultValue="wxnacy") String name + ) { + List res = userRepository.findByName(name); + return res; + } + + @GetMapping("/user/{id}") + public User user( + @PathVariable Integer id + ) { + User user = userRepository.findById(id); + return user; + } + + @PostMapping("/user") + public User create( + @RequestBody Map body + ) { + User user = new User(body.get("name")); + System.out.println(user.getId()); + User item = userRepository.save(user); + System.out.println(item.getId()); + item = userRepository.save(user); + System.out.println(item.getId()); + item = userRepository.saveAndFlush(user); + System.out.println(item.getId()); + + List users = new ArrayList(); + users.add(new User("haah")); + users.add(new User("ssss")); + // List items = userRepository::save(users); + // for(int i = 0; i < items.size(); i++){ + // System.out.println(items.get(i).getId()); + + // } + + new Thread(new Runnable() { + @Override + public void run() { + System.out.println("Before Java8, too much code for too little to do"); + } + }).start(); + + new Thread( () -> System.out.println("In Java8, Lambda expression rocks !!") ).start(); + + + return item; + } +} diff --git a/java/TMD/src/main/java/com/wxnacy/spring/UserRepository.java b/java/TMD/src/main/java/com/wxnacy/spring/UserRepository.java new file mode 100644 index 0000000..28676a9 --- /dev/null +++ b/java/TMD/src/main/java/com/wxnacy/spring/UserRepository.java @@ -0,0 +1,9 @@ +package com.wxnacy.spring; + +import java.util.List; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UserRepository extends JpaRepository { + List findByName(String name); + User findById(Integer id); +} diff --git a/java/TMD/src/main/java/com/wxnacy/spring/bean/Screen.java b/java/TMD/src/main/java/com/wxnacy/spring/bean/Screen.java new file mode 100644 index 0000000..d97b688 --- /dev/null +++ b/java/TMD/src/main/java/com/wxnacy/spring/bean/Screen.java @@ -0,0 +1,84 @@ +package com.wxnacy.spring.bean; + +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.ManyToOne; +import javax.persistence.JoinColumn; + +@Entity +public class Screen{ + @Id + @GeneratedValue() + private Long id; + private String code; + private String name; + private Long shopId; + private Shop shop; + private String brand; + private String mac; + + + public Screen() { + } + + public void setId(Long id) { + this.id = id; + } + + public Long getId() { + return id; + } + + public void setCode(String code) { + this.code = code; + } + + public String getCode() { + return code; + } + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setShopId(Long shopId) { + this.shopId = shopId; + } + + public Long getShopId() { + return shopId; + } + + public void setMac(String mac) { + this.mac = mac; + } + + public String getMac() { + return mac; + } + + public void setBrand(String brand) { + this.brand = brand; + } + + @ManyToOne(cascade = {CascadeType.MERGE,CascadeType.REFRESH }, optional = true) + @JoinColumn(name="shop_id") + public String getBrand() { + return brand; + } + + public void setShop(Shop shop) { + this.shop = shop; + } + + public Shop getShop() { + return shop; + } +} diff --git a/java/TMD/src/main/java/com/wxnacy/spring/bean/Shop.java b/java/TMD/src/main/java/com/wxnacy/spring/bean/Shop.java new file mode 100644 index 0000000..9d47d05 --- /dev/null +++ b/java/TMD/src/main/java/com/wxnacy/spring/bean/Shop.java @@ -0,0 +1,43 @@ +package com.wxnacy.spring.bean; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +public class Shop{ + @Id + @GeneratedValue() + private Long id; + private String code; + private String name; + + + public Shop() { + } + + public void setId(Long id) { + this.id = id; + } + + public Long getId() { + return id; + } + + public void setCode(String code) { + this.code = code; + } + + public String getCode() { + return code; + } + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} diff --git a/java/TMD/src/main/java/com/wxnacy/spring/bean/User.java b/java/TMD/src/main/java/com/wxnacy/spring/bean/User.java new file mode 100644 index 0000000..0db56c3 --- /dev/null +++ b/java/TMD/src/main/java/com/wxnacy/spring/bean/User.java @@ -0,0 +1,45 @@ +package com.wxnacy.spring; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +public class User{ + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Integer id; + private String name; + + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public User() { + } + + public User(Integer id, String name) { + this.id = id; + this.name = name; + } + public User(String name) { + this.name = name; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getId() { + return id; + } + public static void main(String args[]){ + System.out.println("Hello World"); + } +} diff --git a/java/TMD/src/main/java/com/wxnacy/spring/controller/ScreenController.java b/java/TMD/src/main/java/com/wxnacy/spring/controller/ScreenController.java new file mode 100644 index 0000000..4a09e7d --- /dev/null +++ b/java/TMD/src/main/java/com/wxnacy/spring/controller/ScreenController.java @@ -0,0 +1,47 @@ +package com.wxnacy.spring.controller; + +import java.util.List; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.wxnacy.spring.bean.Screen; +import com.wxnacy.spring.repository.ScreenRepository; + + +@RestController +public class ScreenController { + + @Autowired + private ScreenRepository screenRepository; + + @GetMapping("/screen") + public Screen screenByCode( + @RequestParam(required=true) String code + ) { + // List items = screenRepository.findByCode(code); + Screen item = screenRepository.findByCode(code); + // Screen item = items.get(0); + System.out.println(item); + Screen s = screenRepository.getOne(57l); + System.out.println(s); + return item; + } + + @GetMapping("/screen/{id}") + public Screen screenById( + @PathVariable Long id + ) { + Screen item = screenRepository.findById(id); + System.out.println(item); + return item; + } + +} diff --git a/java/TMD/src/main/java/com/wxnacy/spring/repository/BaseRepository.java b/java/TMD/src/main/java/com/wxnacy/spring/repository/BaseRepository.java new file mode 100644 index 0000000..6417fd5 --- /dev/null +++ b/java/TMD/src/main/java/com/wxnacy/spring/repository/BaseRepository.java @@ -0,0 +1,13 @@ +package com.wxnacy.spring.repository; + +import java.io.Serializable; +import java.util.List; +import org.springframework.data.domain.Example; +import org.springframework.data.repository.NoRepositoryBean; +import org.springframework.data.jpa.repository.JpaRepository; + +@NoRepositoryBean +public interface BaseRepository extends JpaRepository { + T findById(ID var1); + +} diff --git a/java/TMD/src/main/java/com/wxnacy/spring/repository/ScreenRepository.java b/java/TMD/src/main/java/com/wxnacy/spring/repository/ScreenRepository.java new file mode 100644 index 0000000..7aa134a --- /dev/null +++ b/java/TMD/src/main/java/com/wxnacy/spring/repository/ScreenRepository.java @@ -0,0 +1,9 @@ +package com.wxnacy.spring.repository; + +import java.util.List; + +import com.wxnacy.spring.bean.Screen; + +public interface ScreenRepository extends BaseRepository { + Screen findByCode(String code); +} diff --git a/java/TMD/src/main/resources/application.properties b/java/TMD/src/main/resources/application.properties new file mode 100644 index 0000000..ed54da4 --- /dev/null +++ b/java/TMD/src/main/resources/application.properties @@ -0,0 +1,5 @@ +# spring.jpa.hibernate.ddl-auto=create +spring.datasource.url=jdbc:mysql://localhost:3306/tmddev +spring.datasource.username=root +spring.datasource.password=wxnacy +spring.datasource.driver-class-name=com.mysql.jdbc.Driver diff --git a/python/flask_sqlalchemy_demo/requirements.txt b/python/flask_sqlalchemy_demo/requirements.txt new file mode 100644 index 0000000..c709098 --- /dev/null +++ b/python/flask_sqlalchemy_demo/requirements.txt @@ -0,0 +1,8 @@ +# Requirements automatically generated by pigar. +# https://github.com/Damnever/pigar + +# run.py: 7,8 +Flask == 0.12 + +# run.py: 9 +Flask_SQLAlchemy == 2.1 diff --git a/python/flask_sqlalchemy_demo/run.py b/python/flask_sqlalchemy_demo/run.py new file mode 100644 index 0000000..436de0b --- /dev/null +++ b/python/flask_sqlalchemy_demo/run.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python +# -*- coding:utf-8 -*- +# Author: wxnacy(wxnacy@gmail.com) +# Description: +# 启动 python run.py +# 创建书籍 +# curl -X POST localhost:5000/book -H "Content-Type:application/json" -d '{"name":"wxnacy"}' +# { + # "id": 94, + # "name": "wxnacy" +# } +# 获取数据 +# curl localhost:5000/book/94 + + + +from flask import Flask +from flask import jsonify +from flask import request +from flask_sqlalchemy import SQLAlchemy + +app = Flask(__name__) +SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:wxnacy@127.0.0.1:3306/study?charset=utf8mb4' +app.config['SQLALCHEMY_DATABASE_URI'] = SQLALCHEMY_DATABASE_URI + +db = SQLAlchemy(app) + + +class Book(db.Model): + __tablename__ = 'book' + id = db.Column(db.INT, primary_key=True) + name = db.Column(db.String, default="") + + def format(self): + return dict(id=self.id, name=self.name) + + +@app.route('/book', methods=['POST']) +def create_book(): + args = request.json + book = Book(**args) + db.session.add(book) + db.session.commit() + return jsonify(book.format()) + +@app.route('/book/', methods=['GET']) +def get_book(id): + book = Book.query.filter_by(id=id).first() + return jsonify(book.format()) + +app.run() diff --git a/python/requirements.txt b/python/requirements.txt new file mode 100644 index 0000000..6096d13 --- /dev/null +++ b/python/requirements.txt @@ -0,0 +1,2 @@ +# Requirements automatically generated by pigar. +# https://github.com/Damnever/pigar diff --git a/python/simple/my_sqlalchemy.py b/python/simple/my_sqlalchemy.py new file mode 100644 index 0000000..d59456f --- /dev/null +++ b/python/simple/my_sqlalchemy.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python +# -*- coding:utf-8 -*- +# Author: wxnacy(wxnacy@gmail.com) +# Description: + +from sqlalchemy import create_engine +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy import Column, Integer, String +from sqlalchemy.orm import sessionmaker +from sqlalchemy import and_ +from sqlalchemy import or_ +from sqlalchemy import text +from collections import namedtuple + +Base = declarative_base() + +SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:wxnacy@127.0.0.1:3306/study?charset=utf8mb4' +engine = create_engine(SQLALCHEMY_DATABASE_URI, echo=True) +Session = sessionmaker(bind=engine) +session = Session() + +class Book(Base): + __tablename__ = 'book' + id = Column(Integer, primary_key=True) + name = Column(String(132)) + + def __str__(self): + return f"Book[id:{self.id}, name:{self.name}]" + +# 创建表 +# Base.metadata.create_all(engine) + +# 添加数据 +# book = Book(name="new book") +# session.add(book) +# session.commit() + +# insert into book (name) values ('wxnacy'); +# insert into book (name) values ('wxnacy'); +# session.add(Book(name="wxnacy")) +# session.add(Book(name="wxnacy")) +# session.commit() + +# session.add_all([Book(name="wxnacy"), Book(name="wxnacy")]) +# session.commit() + +# insert into book (name) values ('wxnacy'), ('wxnacy'); +items = [dict(name="wxnacy"), dict(name="wxnacy")] +session.execute(Book.__table__.insert(), items) +session.commit() + +# books = session.query(Book).filter(and_(Book.id==2, Book.name=="new book")).all() +# books = session.query(Book).filter(~Book.id.in_([2])).all() +# books = session.query(Book).filter().limit(1).all() +# for b in books: + # print(b) +# print(books) + +# book = session.query(Book).filter_by(id=1).first() +# book = session.query(Book).filter(Book.id==1).first() +# print(book) +# session.delete(book) +# session.commit() + + +# res = session.execute(text("select * from book where id = :id"), **dict(id=2)).fetchall() +res = engine.execute(text("insert into book (name) values (:name)"), + **dict(name='text')) +# print(res) +# book = session.query(Book).filter(text("id = :id and name = :name")).params(id=2, name="new book").first() +# print(book) +# res = session.execute(text("select * from book where id = 2")).fetchall() +# res = session.execute(text("select * from book where id = 2")) + +# Record = namedtuple('Record', res.keys()) +# records = {Record(*r) for r in res.fetchall()} +# res = [r for r in records] +# print(res) # > [Record(id=2, name='new book')] + +# def _fmt_i(k, v): + # return k ,v + +# def _fmt(o): + # r = list(map(_fmt_i, res.keys(), o)) + # return {k: v for k, v in r} +# res = [_fmt(o) for o in res.fetchall()] +# print(res) # > [{'id': 2, 'name': 'new book'}] + +# books = session.query(Book).filter(text("id in :ids")).params(ids=[2, 3, 4, 5]).all() +# for b in books: + # b.name = f'{b.id}-book' + # session.add(b) +# session.commit() + +res = engine.execute(text("select sum(id) from book")).fetchall() +print(res) + diff --git a/python/simple/scheduler.py b/python/simple/scheduler.py new file mode 100644 index 0000000..505a239 --- /dev/null +++ b/python/simple/scheduler.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python +# -*- coding:utf-8 -*- +# Author: wxnacy(wxnacy@gmail.com) +# Description: + +from apscheduler.schedulers.blocking import BlockingScheduler +from datetime import datetime + +sched = BlockingScheduler() + +# @sched.scheduled_job('interval', id='my_job1', seconds=3, + # start_date='2018-01-23 09:30:00', + # end_date='2018-01-23 18:22:00') +@sched.scheduled_job('date', id='my_job', run_date='2018-01-23 18:25:30') +def my_job(): + print(f'{datetime.now():%H:%M:%S} Hello World ') + +# sched.add_job(my_job, 'interval', seconds=5) +# sched.add_job(my_job, 'cron', hour=17, minute=22, second=55) +sched.start()