@第一节上周回顾没看

@博客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. pycharm+pydesigner+pyqt5 如何添加图片资源

    pydesigner 上添加资源比较容易: 步骤一用于编辑,步骤二步创建,步骤三创建文件新的qrc: 步骤一:新建一个Prefix,步骤二给prefix添加资源文件.至此,资源文件添加完成 采用 Py ...

  2. What is the Annotation?

    Annotation称为注释或注解,它是一个接口.注解提供了一种为程序元素(类.方法.成员变量等)设置元数据(描述其它数据的数据)的方法.编译器.开发工具或其它程序中可以通过反射来获取程序中的Anno ...

  3. .Net牛刀小试-1缓冲使用

    根据文件名缓冲文件: /// <summary> /// 根据文件名缓冲指定目录文件 /// </summary> public class FileCacheAdapter ...

  4. C#知识点汇总

    核心技术课程 编程基础强化练习.面向过程编程(变量.if.for.while.函数.类型转换.枚举 .数组.重载.值类型.引用类型.ref.out.字符串).面向对象编程(类.继承 .接口.异常.索引 ...

  5. PythonStudy——函数对象的案例

    # part1 # 加法运算 def add(n1, n2): return n1 + n2 def low(n1, n2): return n1 - n2 # 四则运算 def computed(n ...

  6. Python之print()函数

    1. 输出字符串 >>> str = 'Hello World' >>> print (str) Hello World 2. 格式化输出整数 支持参数格式化 &g ...

  7. Redis入门的简单使用

    Redis是什么? redis是一个开源的,面向键/值对的NOSQL的分布式数据库系统 NOSQL指的是非关系型的数据,简单直白地讲就是在非关系型的数据库中不存在表的概念,而是以键值对的方式, 即一个 ...

  8. 承接小程序外包 微信小程序外包 H5外包 就找北京动点软件

    承接小程序外包 微信小程序外包 H5外包 就找北京动点软件 长年承接微信小程序.微信公众号开发 全职的H5开发团队,开发过几十款微信小程序公众号案例 欢迎来电咨询 QQ:372900288 微信:li ...

  9. 关于UI自动化中元素定位常用方法的个人总结

    1.如果目标元素有id属性,优先使用id定位: 2.元素locator尽可能保证简洁,考虑locator中路径的变化频率,尽量减少后期更新和维护成本: 3.使用xpath时,不要一味的使用‘/’逐层进 ...

  10. 移动端css水平垂直居中

    水平垂直居中 1.margin 负值调整偏移实现 兼容性: 当前流行的使用方法. <div class="box"> <div class="conte ...