惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MyScale Blog
MyScale Blog
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
N
News and Events Feed by Topic
Recent Announcements
Recent Announcements
D
Docker
M
MIT News - Artificial intelligence
L
LangChain Blog
I
InfoQ
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
P
Proofpoint News Feed
博客园_首页
MongoDB | Blog
MongoDB | Blog
美团技术团队
S
Schneier on Security
G
GRAHAM CLULEY
月光博客
月光博客
有赞技术团队
有赞技术团队
Vercel News
Vercel News
Scott Helme
Scott Helme
P
Privacy International News Feed
Last Week in AI
Last Week in AI
Recorded Future
Recorded Future
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Cloudflare Blog
Attack and Defense Labs
Attack and Defense Labs
Google Online Security Blog
Google Online Security Blog
Simon Willison's Weblog
Simon Willison's Weblog
量子位
S
Security @ Cisco Blogs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
V
Visual Studio Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
NISL@THU
NISL@THU
N
Netflix TechBlog - Medium
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Spread Privacy
Spread Privacy
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
罗磊的独立博客
Security Archives - TechRepublic
Security Archives - TechRepublic
T
Threatpost
L
Lohrmann on Cybersecurity
www.infosecurity-magazine.com
www.infosecurity-magazine.com
S
Security Affairs
Cloudbric
Cloudbric
爱范儿
爱范儿
H
Heimdal Security Blog
PCI Perspectives
PCI Perspectives

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观CodeLab Neverland 发布 CodeLab Adapter 3.3.1 DynamicTable 之 纸糊方向盘 CodeLab DynamicTable: 一个可实施的技术方案 CodeLab Insight 发布 Alpha 版 情人节 Home Assistant 周报 && IoT 周报 (02) Joplin: 关注隐私的 Evernote 开源替代软件 浏览器的未来与 Web 传感器 Home Assistant 周报 && IoT 周报 (01) 百宝箱(01) 论自由 介绍 WebThings Home Assistant 周报 && iot 周报 (00) 百宝箱(00) 毛姆读书心得 传世之作 周末徒步 CodeLab Adapter ❤️ Jupyter/Python 航班 躲雨 夏令营途中 [译]思想--作为一种技术 The future of coding 美国之行 三门问题的程序模拟 从Python转向Pharo https://blog.just4fun.site/post/iot/iot-open-source-projects/ Python异步编程笔记 https://blog.just4fun.site/post/iot/iot-open-source-hardware-community/ 万物积木化开发者社区 CodeLab ❤️ Blender Scratch3技术分析之云变量 API(第7篇) [译]对管道(Pipes)的偏爱 [译]提出正确的问题比得到正确答案更重要 蓝牙设备与Scratch3.0 创建你的第一个Scratch3.0 Extension Scratch3技术分析之项目内部数据(第6篇) Scratch3技术分析之社区 API(第5篇) Scratch3技术分析之User API(第4篇) Scratch3技术分析之项目主页API(第3篇) Scratch3技术分析之静态资源API(第2篇) Scratch3.0、micro:bit与Windows7 https://blog.just4fun.site/post/iot/zerynth-vs-micropython/ 核聚变、方所与半宅空间 可视化编程为何是个糟糕的主意 codelab.club周末聚会 关于codelab.club '下一件大事'是一个房间 Hungry Robot - Eat everything 编程作为一种思考方式 今日简史 史蒂夫·乔布斯传 罗素自选文集 https://blog.just4fun.site/post/edx/tianjin-scratch-ai/ https://blog.just4fun.site/post/edx/richie-cms-openedx/ 徒步武功山 WebUSB与micro:bit 积木化编程与3D场景 夜宿武功山顶 scratch3-adapter接入优必选Alpha系列机器人 https://blog.just4fun.site/post/edx/video-migration-note/ scratch3-adapter重构笔记 https://blog.just4fun.site/post/edx/edx-community-members/ 两种硬件编程风格的比较 使用micro:bit自制PPT翻页笔 柏拉图对话集 scratch3.0 + micro:bit 七月电影放映计划 非营利组织的管理 Screenly--用树莓派让任何屏幕变为可编程的数字标牌 以最佳实践开始你的Django项目 micro:bit与事件驱动 为Scratch3.0设计的插件系统(上篇) OCR应用一例 近两年读过的一些好书 blockly开发之使用python驱动浏览器中的turtle(2) 牛顿新传 文学理论入门 逻辑的引擎 人生的意义 blockly开发之生成并运行js代码(1) blockly开发之hello world(0) micro:bit使用笔记 神器之Termux https://blog.just4fun.site/post/iot/micropython-notes/ Cozmo what is this Scratch的前世今生 下段旅程 我行在远方 爆裂 途中杂记 https://blog.just4fun.site/post/edx/open-edx-startup/ cozmo系列之入门 - 有性格且可编程的机器人 PaperWeekly开发笔记 创业二三事
关系型数据库小结
2016-05-03 · via 夜行人

文章目录

平时用ORM偏多,生疏了SQL,周末翻了一遍《SQL必知必会》,也整理了一下相关工具,做个记录

关系数据库(Relational database)

按照维基百科说法

表(关系Relation)是以行(属性Attribate)和列(值组Tuble)的形式组织起来的数据的集合。一个数据库包括一个或多个表 (关系Relation)。例如,可能有一个有关作者信息的名为authors的表(关系Relation)。每列(值组Tuble)都包含特定类型的信息,如作者的姓氏。每行(属性Attribate)都包含有关特定作者的所有信息:姓、名、住址等等。在关系型数据库当中一个表 (关系Relation)就是一个关系,一个关系数据库可以包含多个表(关系Relation)

安装

开源的关系数据库中,PostgreSQL 与MySQL 最为流行。一般使用linux发行版的包管理器就能方便地安装,更多的安装方式可以参考官网

客户端

关系数据库中,我用MySQL和SQLite偏多,所以列出这两个数据库相关的工具

当然更经常地,我偏好在jupyter里使用sqlalchemy来连接数据库

SQL

《SQL必知必会》(第三版)里的代码:teach-yourself-sql

使用mycli连接数据库

1
2
CREATE DATABASE mytest; --创建数据库
USE mytest; --进入数据库
1
2
3

mysql -u root -D mytest   < /tmp/teach-yourself-sql/create.txt  #创建新表
mysql -u root -D mytest   < /tmp/teach-yourself-sql/populate.txt  # 插入数据
1
2
3
SHOW TABLES;  --查看表
DESCRIBE Customers;  --显示表结构
select * from Customers limit 5; --查看数据 

查询

使用pandas做实验,存为ipynb

SQL.ipynb

todo:用SQLAlchemy实现

SQLAlchemy

SQLAlchemy是Python社区中最广泛使用的ORM工具,底层而强大

SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合;而对象集合的抽象又重要于表和行

连接已有数据库

一般情况下我们已经有数据库了,那么如何将既有数据库和SQLAlchemy对接呢

可以利用表的反射(Table Reflection)。把它们”导入”进来即可,这时得使用autoload参数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
from sqlalchemy import create_engine, MetaData, Table
#使用mysql,需要安装mysql驱动
#brew install mysql-connector-c(mac)
#sudo apt-get install libmysqlclient-dev (ubuntu)
#pip install MySQL-python
engine = create_engine('mysql+mysqldb://root@edx_host/edxapp', echo=True)
metadata = MetaData(engine)
conn = engine.connect() #连接成功
print 'auth_user' in metadata.tables #true
user_table = Table('auth_user', metadata, autoload=True) #metadata携带连接信息
print [c.name for c in user_table.columns] #打印出字段名
ins = user_table.insert()
print ins #查看编译的sql
users= conn.execute("SELECT * FROM auth_user limit 5") #直接执行sql

s = sqlalchemy.select([user_table])

##基于SQLAlchemy的便利工具

dataset

In short, dataset makes reading and writing data in databases as simple as reading and writing JSON files.

1
2
3
4
5
6
db = dataset.connect('mysql+mysqldb://root@edx_host/edxapp')
#print(db.tables)
table = db['auth_user']
table.columns
#result = db.query
# 导出数据 dataset.freeze(result, format='json', filename='users.json')

####records

SQL for Humans

易于导出到xls或是json。records 使用了 tablib 可以导出为任何格式

1
2
3
db = records.Database('mysql+mysqldb://root@edx_host/edxapp')
rows = db.query('select * from auth_user limit 5')
print rows.dataset

peewee

a small, expressive orm – supports postgresql, mysql and sqlite

使用习惯和django orm很像

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
:::python
# http://docs.peewee-orm.com/en/latest/peewee/example.html

from peewee import *
import datetime

mysql_db = MySQLDatabase('yunfan', user='root', charset='utf8mb4')
#CREATE DATABASE `yunfan` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;  创建数据库使用utf-8 否则有编码问题

class QiniuStore(Model):
    course_id = CharField(null = True)
    username = CharField(default="")
    #key是关键字
    file_key = CharField(default="")
    filename = CharField(default="")
    filesize = CharField(default="0")
    #endUser = Column(String(100),nullable=True)
    create_time = DateTimeField(default=datetime.datetime.now)
    class Meta:
        database = mysql_db
        order_by = ('-create_time',)


if __name__ == "__main__":
    mysql_db.connect()
    mysql_db.create_tables([QiniuStore])

pandas

pandas的DataFrame大多时候也用来容纳二维数据,像一张,所以易于与数据库打交道

1
2
3
4
5
6
7
#Pandas读取Mysql数据
import pandas as pd
import MySQLdb
mysql_cn= MySQLdb.connect(host='127.0.0.1', port=3306,user='root', passwd='', db='edxapp')
#df = pd.read_sql('select * from auth_user limit 100;', con=mysql_cn)  
df = pd.read_sql('select * from auth_user limit 10;', con=mysql_cn)
mysql_cn.close()

Read SQL query into a DataFrame ,之后可以使用pandas的查询和绘图统计功能

参考:

心得

  • 数据库的重点是表,操作可以用python方法,为了查询的灵活,还是需要sql
  • 用好ORM的前提是了解关系数据库的概念和典型用例

理解

数据库表是一个二维表,包含多行多列。把一个表的内容用Python的数据结构表示出来的话,可以用一个list表示多行,list的每一个元素是tuple,表示一行记录

行,想象为二维数据(csv),外键是一种关系

通用技能

  • 多维数据的可视化 (降维)是一个常见的问题模式 。如何聚合,pandas部分
  • 帆船项目 帮助理解pandas如何用于web流
    • 如何实时读取sql,这样一来oricle问题就解决了 可视化问题
    • 从真实数据学习数据图表化的原理 《网站分析》
  • 投资技能 pandas -> scikit-learn
  • edx的log先导入数据库 保留关系 然后变为扁平化数据
    • 将log导入数据库是为了获得强大的查询能力
  • 对sql的使用场景要有所了解 适合作什么

#参考

文章作者 种瓜

上次更新 2016-05-03