@第一节上周回顾没看

@博客day11

https://www.cnblogs.com/alex3714/articles/5950372.html

@InnoDB,是MySQL的数据库引擎之一

@Source Distribution 是源代码版,你需要自己编译成可执行软件。 
Binary Distribution 是可执行版,直接可以拿来用的,他已经给你编译好的版本

@RDBMS即关系数据库管理系统(Relational Database Management System)的特点:
1.数据以表格的形式出现
2.每行为各种记录名称
3.每列为记录名称所对应的数据域
4.许多的行和列组成一张表单
5.若干的表单组成database

@关系型数据库

最常用Oracle,MySQL,sqlserver(微软),还有db2,postgresql,sqlite,access

@冗余:如果经常有两个表的跨表查询,可以在一个表里复制目标字段进去。

@主键:唯一;外键:外面的表用来关联原表的字段。

@索引:通过哈希、二分、二叉树等进行字段优化

@哈希

>>> hash('abcd')

9104146398837502244

@复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。

@参照完整性:不允许引用不存在的实体。

@MySQL数据库特点:

  • Mysql是开源的,所以你不需要支付额外的费用。
  • Mysql支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
  • MySQL使用标准的SQL数据语言形式。
  • Mysql可以允许于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
  • Mysql对PHP有很好的支持,PHP是目前最流行的Web开发语言。
  • MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。
  • Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统。

@MySQL下载及安装

找到community版本下载,下载推荐的版本,不要others。

一直next。

!!!出现错误Ended configuration step: Creating MySQL Router configuration files,

找到bin的目录如:C:\Program Files\MySQL\MySQL Server 8.0\bin,添加到环境变量

打开cmd,输入

mysql –u root –p

输入root的密码

@B站博主

  1. win系统原来是5.7的话最好直接全删除再重新安装8版本。
  2. 刷题网站:https://leetcode.com/;https://www.w3resource.com/mysql-exercises/;https://www.hackerrank.com/
  3. 可以搜索sql题库,两个语句差不多。

@

C:\Users\sunlu>mysql
ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)

表示需要输入用户名密码

C:\Users\sunlu>mysql -uroot -pwrongpw
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

以上表示密码错误,改为

mysql -uroot -p+密码

查看所有库

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+--------------------+
6 rows in set (0.01 sec)

进入数据库

mysql> use mysql;
Database changed

看有哪些表

mysql> show tables;

看表的结构

mysql> desc servers;

filed是列的名字,char就是字符串,(64)表示限制长度,null表示可不可以为空(no表示不行),pri就是primary主键(可以有一个主键,也可以有两个主键组成的联合键)。

看数据

mysql> select * from servers;(servers后面加上\G可以格式化输出内容)

创建数据库

mysql> create database text;

关于输入什么都没反应,是因为引号不对称造成的,自行输入补全在写入命令即可

    '> exit;
'> quit;
'> \q;
'> use text;
'> '\q;
Bye

@12-4-32到第九节都没看

@@@快速浏览

@查数据

select * from user\G;#加G可以让搜索结果整洁显示

@杀进程

kill 数字

@查看数据库权限

show grants for lala;

@创建数据库

create database oldboydb charset utf8;#默认不支持中文

@删除数据库

drop database lalala

@12-5-4-37''从这继续

@第十节

@python控制mysql

http://www.cnblogs.com/wupeiqi/articles/5713330.html

@创建用户

mysql> create user 'luwen'@'localhost' identified by 'lala123';

@授权用户

mysql> grant all privileges on *.* to 'luwen'@'localhost';

@刷新权限;

mysql> flush privileges;

@http://www.cnblogs.com/wupeiqi/articles/5713330.htm

@pymysql操作(未尝试)

import pymysql

# 创建连接
conn = pymysql.connect(host='192.168.33.203', port=3306, user='luwen', passwd='lala123', db='text')
# 创建游标
cursor = conn.cursor() # 执行SQL,并返回收影响行数
effect_row = cursor.execute("select * from student")
print(cursor.fetchone())
print('------------')
print(cursor.fetchall())#第一条读过了,所以显示剩下的 # 执行SQL,并返回受影响行数
effect_row = cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)]) # 提交,不然无法保存新建或者修改的数据
conn.commit()

@获取新创建数据自增ID(大神没用过)

@ORM

@http://www.cnblogs.com/alex3714/articles/5978329.html

@orm英文全称object relational mapping,就是对象映射关系程序,类似python的面向对象如“AASDLFJ”.upper()用‘.’直接调用。就不用再写原生sql了

@SQLAlchemy本身无法操作数据库,其必须依赖pymsql等第三方插件,Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如:

MySQL-Python
mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname> pymysql
mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>] MySQL-Connector
mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname> cx_Oracle
oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]

操作(未尝试)

import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
#连接数据库,相当于conn = pymysql.connect()
engine = create_engine("mysql+pymysql://root:alex3714@localhost/testdb",#localhost???
encoding='utf-8', echo=True)#echo=True可以在命令执行时打印出来执行结果,方便调试
Base = declarative_base()  # 生成orm基类

class User(Base):
__tablename__ = 'user' # 表名
id = Column(Integer, primary_key=True)
name = Column(String(32))
password = Column(String(64)) Base.metadata.create_all(engine) # 创建表结构

@除上面的创建之外,还有一种创建表的方式,虽不常用,但还是看看吧

from sqlalchemy import Table, MetaData, Column, Integer, String, ForeignKey
from sqlalchemy.orm import mapper metadata = MetaData() user = Table('user', metadata,
Column('id', Integer, primary_key=True),
Column('name', String(50)),
Column('fullname', String(50)),
Column('password', String(12))
) class User(object):#创建时没用,查询时有用
def __init__(self, name, fullname, password):
self.name = name
self.fullname = fullname
self.password = password mapper(User,user)

@承接上面的代码,继续用orm创建一条数据

from sqlalchemy.orm import sessionmaker
Session_class = sessionmaker(bind=engine) # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
Session = Session_class() # 生成session实例 user_obj = User(name="alex", password="alex3714") # 生成你要创建的数据对象
print(user_obj.name, user_obj.id) # 此时还没创建对象呢,不信你打印一下id发现还是None Session.add(user_obj) # 把要创建的数据对象添加到这个session里, 一会统一创建
print(user_obj.name, user_obj.id) # 此时也依然还没创建 Session.commit() # 现此才统一提交,创建数据

@@@增删改查

@查询

#在创建表格的类class User(Base)下面创建函数:
def __repr__(self):
return "<%s name:%s>" % (self.id,self.name)
my_user = Session.query(User).filter_by().all()
print(my_user)

增加条件查询

my_user = Session.query(User).filter(User.id>2).all()#等于的话用==
print(my_user)

多条件查询

objs = Session.query(User).filter(User.id>0).filter(User.id<7).all()
#上面2个filter的关系相当于 user.id >1 AND user.id <7 的效果

@修改(就是重新赋值)

my_user = Session.query(User).filter_by(name="alex").first()
my_user.name = "Alex Li"
Session.commit()

@回滚

Session.rollback() #插入后回滚就没了

@统计

Session.query(User).filter(User.name.in_(['jack','wang'])).count()#sql默认不区分大小写

@分组

from sqlalchemy import func
print(Session.query(func.count(User.name),User.name).group_by(User.name).all() )

@连表查询

ret = session.query(Users, Favor).filter(Users.id == Favor.nid).all()#关联查询

@@@实例(学生上课记录)

@表格关系

@创建两个表格:学生信息和上课记录。并将上课记录关联学生id

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Enum,DATE, Integer, String,ForeignKey
#连接数据库,相当于conn = pymysql.connect()
engine = create_engine("mysql+pymysql://root:s7889983@localhost/text",
encoding='utf-8', echo=True)#echo=True可以在命令执行时打印出来执行结果,方便调试
Base = declarative_base() # 生成orm基类 class Student(Base):
__tablename__ = 'student' # 表名
id = Column(Integer, primary_key=True)
name = Column(String(32),nullable=False)
register_date=Column(DATE,nullable=False)
#gender=Column(String(32),nullable=False)
#显示的内存对象对址你是没办法分清返回的是什么数据的,
#除非打印具体字段看一下,如果想让它变的可读,只需在定义表的类下面加上
def __repr__(self):
return "<%s name:%s>"%(self.id,self.name)
class StudyRecord(Base):
__tablename__ ="study_record"
id = Column(Integer, primary_key=True)
day=Column(Integer,nullable=False)
status=Column(String(32),nullable=False)
stu_id=Column(Integer,ForeignKey('student.id'))#外键 def __repr__(self):
return "<%s name:%s>"%(self.id,self.day) Base.metadata.create_all(engine) # 创建表结构

@12-13-23

@

@

python-day12 MySQL、sqlalchemy的更多相关文章

  1. MySQL、sqlalchemy、pymysql、mysqldb、DBAPI之间关系梳理(终于明白了)

    MySQL.sqlalchemy.pymysql.mysqldb.DBAPI之间关系梳理(终于明白了) python3不再支持mysqldb 请用pymysql和mysql.connector 问题背 ...

  2. Python使用MySQLConnector/Python操作MySQL、MariaDB数据库

    使用MySQL Connector/Python操作MySQL.MariaDB数据库   by:授客 QQ:1033553122 因目前MySQLdb并不支持python3.x,而MySQL官方已经提 ...

  3. Python自动化运维之18、Python操作 MySQL、pymysql、SQLAchemy

    一.MySQL 1.概述 什么是数据库 ? 答:数据的仓库,和Excel表中的行和列是差不多的,只是有各种约束和不同数据类型的表格 什么是 MySQL.Oracle.SQLite.Access.MS ...

  4. Python操作MySQL之SQLAlchemy

      SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结 ...

  5. Python和Mysql、Nginx

    链接: python入门和基础: Python 中文学习大本营 你是如何自学 Python 的? 简明 Python 教程 给伸手党的福利:Python 新手入门引导 <Python爬虫学习系列 ...

  6. Python之Mysql及SQLAlchemy操作总结

    一.Mysql命令总结 1.创建库 create database test1; 2.授权一个用户 grant all privileges on *.* to 'feng'@'%' identifi ...

  7. 爬虫(九):python操作MySQL、MongoDB

    1. python操作MySQL 1.1 MySQL基础 在java基础部分就写过了. https://www.cnblogs.com/liuhui0308/p/11891844.html 1.2 p ...

  8. 多表查询思路、navicat可视化软件、python操作MySQL、SQL注入问题以及其他补充知识

    昨日内容回顾 外键字段 # 就是用来建立表与表之间的关系的字段 表关系判断 # 一对一 # 一对多 # 多对多 """通过换位思考判断""" ...

  9. python操作MySQL、事务、SQL注入问题

    python操作MySQL python中支持操作MySQl的模块很多 其中最常见就是'pymysql' # 属于第三方模块 pip3 install pymysql # 基本使用 import py ...

随机推荐

  1. Tomcat中的Connector配置

    所有的Connector提供的配置项(不完全版scheme, isSecure, xpoweredBy, useIPVHosts ): allowTrace 如果需要服务器能够处理用户的HAED/TR ...

  2. python 迭代器 一个奇怪的解决方法

    一般我们在类里面写迭代器都是如下写法: class IterableSomthing: def __iter__(self): return self def __next__(self): retu ...

  3. informix 常见系统表

    systables:描述数据库中的每张表:syscolumns:描述数据库中表的列:sysindexes:描述数据库中列的索引:sysfragments:存储了分段索引的片段信息:sysfragaut ...

  4. PyCharm设置仿sublime配色__Py版本2018.3.5

    效果图: 导出settings 模板为: 1.https://files.cnblogs.com/files/xier/PyCharm_settings.zip 2.https://files.cnb ...

  5. Spark源码系列:RDD repartition、coalesce 对比

    在上一篇文章中 Spark源码系列:DataFrame repartition.coalesce 对比 对DataFrame的repartition.coalesce进行了对比,在这篇文章中,将会对R ...

  6. How to run Python code from Sublime

    How to run Python Code from Sublime,and How to run Python Code with input from sublime Using Sublime ...

  7. 《python for data analysis》第二章,美国1880-2010年出生人口姓名的数据分析

    <利用python进行数据分析>第二章的姓名例子,代码.整个例子的所有代码集成到了一个文件中,导致有些对象名如year同时作为了列名与行名,会打印warning,可分不同的part依次运行 ...

  8. java中构造代码块、方法调用顺序问题

    1. 继承的概念 继承在本职上是特殊——一般的关系,即常说的is-a关系.子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法. 2. 继承中的初始化顺序 从类的结构上而言,其 ...

  9. maven 项目pom文件引入lib下的jar包

    <dependency> <groupId>abc</groupId> <artifactId>abc</artifactId> <v ...

  10. monitor.sh

    #!bin/bash message_counts="" succeed_counts="" all_succeed_counts="" f ...