共計 10974 個字符,預計需要花費 28 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
這篇文章給大家分享的是有關 Python 全棧介紹 MySQL 數據庫的示例的內容。丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考。一起跟隨丸趣 TV 小編過來看看吧。
主要三個方面:
1.Linux 終端命令
2.MySQL 語句
3.Python 調用
終端命令:
vi 文本編輯器
cat /etc/password | grep“用戶名” 獲取 user 表
sudo -i 獲取 root 權限
sudo apt-get install python3-pip 安裝 pip3
sudo pip3 install pymysql 安裝 mysql
sudo apt-get install mysql-server 安裝服務端
sudo apt-get install mysql-client 安裝客戶端
sudo apt-get update 讀取列表 保存到 /var/lib/apt/lists
sudo apt-get upgrade 對比下載列表并更新
sudo /etc/init.d/mysql status 查詢狀態
sudo /etc/init.d/mysql stop 停止服務
sudo /etc/init.d/mysql restart 重啟服務
sudo /etc/init.d/mysql reload 重新加載
mysql - h 主機地址 - u 用戶名 - p 密碼 鏈接 mysql
修改 mysql 默認字符集:
sudo -i 1. 獲取 root
chmod 644 文件名 2. 修改文件權限
cd etc/mysql/mysql.conf.d 3. 進入配置文目錄
cp etc/msql.cnf/mysqld.cnf.bak 4. 備份
subl mysqld.cnf 5.vi 打開源文件
[mysqld] 目錄
character_set_server = utf8 6. 添加命令
/etc/init.d/mysql
mysqldump - u 用戶 - p 源庫名 ~/xxx.sql
數據備份:
參數:
–all-databases 1. 備份所有庫
庫名 2. 備份單個庫
-B 庫 1 庫 2.. 3. 備份多個庫
庫名 表 1 表 2… 4. 備份指定庫指定表
數據恢復:
mysql -uroot -p 目標庫名 xxx.sql 1. 恢復備份庫
mysql -uroot -p –one-database 目標庫名 xxx.sql 2. 恢復備份內某一個庫
恢復:表不刪除 表記錄刪除覆蓋
MySQL 遠程連接:
sudo -i 1. 管理員模式
cd /etc/mysql/mysql.conf.d/ 2.cd 到 mysql 目錄
vi mysqld.cnf 3. 打開注釋掉默認 IP
#bind-address = 127.0.0.1 4. 保存
/etc/init.d/mysql restart 5. 重啟服務
授權用戶:
grant 授權列表 on 庫. 表 to“用戶名“@”%”identified by“密碼”with grant option 1. 命令格式
示例:grant all privileges on *.* to“tiger”@”%”identified by“123”with grant option; 2. 示例
all privileges、select、insert … 4. 庫. 表: *.* 所有庫所有表 3. 權限列表
python3 模塊安裝:
模塊名:pymysql
在線:sudo pip3 install pymysql
離線:pymysql-0.7.11.tar.gz
$ tar -zxvf pymyql-0.7.11.tar.gz
$ cd pymysql-0.7.11
$ sudo python3 setup.py install
驗證:
$ python3
import pymysql
python2 模塊安裝:
模塊名:MySQLdb
安裝:sudo pip install mysql-python
sqlalchemy 框架 安裝:
在線:sudo pip3 install sqlalchemy
離線:
$ tar -zxvf SQLAlchemy-1.2.10.tar.gz
$ cd SQLAlchemy-1.2.10
$ sudo python3 setup.py install
驗證:
$ python3
import sqlalchemy
pymysql 使用:
from pymsql import * 導入模塊
(db = pymysql.connect(…)) 1、建立數據庫連接
c = db.cursor()) 2、創建游標對象
c.execute(“insert ….”) 3、游標方法:
db.commit() 4、提交到數據庫
c.close() 5、關閉游標對象
db.close() 6、斷開數據庫連接:
7.connect 對象:
db = pymysql.connect(參數列表)
1、host:主機地址, 本地 localhost
2、port:端口號, 默認 3306
3、user:用戶名
4、password:密碼
5、database:庫
6、charset:編碼方式, 推薦使用 utf8
8. 連接對象的方法:
數據庫連接對象 (db) 的方法
1、db.close() 關閉連接
2、db.commit() 提交到數據庫執行
3、db.rollback() 回滾
4、cur = db.cursor() 返回游標對象, 用于執行具體 SQL 命令
9. 游標對象的方法:
游標對象 (cur) 的方法
1、cur.execute(sql 命令,[列表]) 執行 SQL 命令
2、cur.close() 關閉游標對象
3、cur.fetchone() 獲取查詢結果集的第一條數據
((記錄 1),)
4、cur.fetchmany(n) 獲取 n 條
((記錄 1),(記錄 2))
5、cur.fetchall() 獲取所有記錄
ORM:orm(Object Relation Mapping 對象關系映射) 定義:把對象模型映射到 MySQL 數據庫中
SQL 命令:
/var/lib/mysql MySQL 數據目錄
show variables like“autocommit”; 查詢 commit 事務
begin; 開啟事務
commit; 提交事務(MySQL 默認自動提交)
rollback; 終止事務
system sudo -i 由數據直接進入終端
show databases; 查看已有庫
create database 庫名; 創建庫
create database 庫名 charcater set utf8; 指定字符集
show create database 庫名; 查看庫字符集
select database(); 查看當前所在庫
use 庫名; 切換庫
drop database 庫名; 刪除庫
show tables; 查看已有表
create table 表名(字段名 1 數據類型,….); 創建表
show create table 表名; 查看表字符集
desc 表名; 查看表結構
drop table 表名; 刪除表
insert into 表名 values(值 1),(值 2)…; 插入完整記錄
insert into 表名(字段名 1,…)values(值 1),…; 插入字段數據
select * from 表名 [where 條件]; 查詢所有字段
select 字段名 1,字段名 2,…from 表名[where 條件]; 查看字段
alter table 表名 add 字段名 數據類型; 添加字段
alter table 表名 add 字段名 數據類型 first; 頭插)
alter table 表名 add 字段名 數據類型 after 字段名; 指定插入)
alter table 表名 drop 字段名; 刪除字段
alter table 表名 modify 字段名 新數據類型; 修改數據類型
alter table 表名 rename 表名; 表重命名
delete from 表名 where 條件; 刪除表記錄(必須加 where)
update 表名 set 字段 1 = 值 1,字段名 2 = 值 2,… where 條件 更改表記錄(必須加 where)
alter table 表名 change 原名 新名 數據類型; 字段重命名
create table 表名 select .. from 表名 where 條件; 復制表(不復制 key)
create table 表名 select * from 表名 where false; 復制表結構(不復制 key)
sex enum(“M”,”F”,”S”)not null defaulf“S” 約束
show variables like 變量名; 查詢 MySQL 變量
select 字段名列表 from 表名列表; (笛卡爾積)
select t1.name,t2.name from t1,t2 where 條件 多表查詢
create index 索引名 on 表名(字段名); 添加普通索引
create table(….index(字段名),…) 創建表時創建普通索引
drop index 索引名 on 表名; 刪除普通索引
show index from 表名; 查看普通索引
create unique index 索引名 on 表名(字段名); 添加唯一索引
create table 表名(…. , unique key (字段名) ); 創建表時創建唯一索引
drop unique index 索引名 on 表名; 刪除唯一索引
show unique index from 表名; 查看唯一索引
alter table 表名 add primary key(字段名); 添加主鍵索引
create table 表名(…. , id int,primary key (字段名) ); 創建表時創主鍵一索引
(id int primary key auto_increment,)auto_increment=10000; 設置自增長起始值
alter table 表名 modify id int auto_increment; 添加自增長
alter table 表名 auto_increment=20000; 修改自增長起始值
alter table 表名 modify id int; 刪除自增長
alter table 表名 drop primary key; 刪除主鍵索引
show index from 表名 G; 查看表索引
desc 表名; 查看表結構(key)
Non_Unique:1 :index 普通索引(查詢結果)
Non_Unique:0 :unique 唯一索引(查詢結果)
alter table 表名 drop foreign key 外鍵名; 刪除外鍵
show create table 表名; 查看外鍵名
創建外鍵:
create……t1();
create table t2(
…
foreign key(參考字段名)
references 主表(被參考字段名)
on delete 級聯動作
on update 級聯動作);
添加外鍵:
alter table 表名 add
foreign key(參考字段) references 主表(被參考字段)
on delete …
on update …
級聯動作:
restrict(默認)不允許主表操作從表
cascade:跟隨刪除、更新
set null:主表更改后從表值為 NULL
內鏈接:
select 字段名 from 表 1
inner join 表 2 on 條件
inner join 表 3 on 條件…;
外鏈接. 左鏈接:
以左表為主顯示查詢結果
select 字段名 from 表 1
left join 表 2 on 條件
left join 表 3 on 條件…;
右鏈接
以右表為主顯示查詢結果
數據導入:
load data infile“文件名”
into table 表名
fields terminated by“分隔符”
lines terminated by“n”;
數據導出:
select … from 表名
into outfile“/var/lib/mysql-files/ 文件名”
fields terminated by“分隔符”
lines terminated by“n”;
數據恢復:
恢復單個庫
mysql -uroot -p 目標庫名 xxx.sql
從所有庫備份中恢復某一個庫(-one-database)
mysql -uroot -p –one-database 目標庫名 xxx.sql
恢復:表不刪除 表記錄刪除覆蓋
數據備份:
mysqldump - u 用戶 - p 源庫名 ~/xxx.sql
–all-databases 備份所有庫
庫名 備份單個庫
-B 庫 1 庫 2.. 備份多個庫
庫名 表 1 表 2… 備份指定庫指定表
運行時間檢測:
開啟:set profiling=1;
關閉:set profiling=0;
查詢執行記錄:show profilings;
SQL 查詢:
3.select … 聚合函數 from 表名
1.where
2.group by…
4.having …
5.order by …
6.limit …;
查詢嵌套:
select … from 表名 where 條件(select ….);
2、找出每個國家攻擊力最高的英雄的名字和攻擊值
select name,gongji from sanguo
where
(country,gongji) in
(select country,max(gongji) from sanguo group by country);
where:只能操作表中實際存在的字段
group by:給查詢結果進行分組
having:對查詢結果進一步篩選
distinct:不顯示字段重復值
show engines; 查看所有存儲引擎
show create table 表名; 查看表的存儲引擎
create table 表名(…)engine=myisam; 創建表時指定存儲引擎
alter table 表名 engine=innodb; 添加儲存引擎
InnoDB:
InnoDB 特點(2 文件):
行級鎖、支持外鍵、事務操作
.frm(表結構,索引)、.ibd(表記錄)
MyISAM:
MyISAM 特點(3 文件):
獨享表空間、表級鎖
.frm(結構)、.myd(記錄)、.myi(索引)
鎖:
select:加讀鎖之后別人不能更改表記錄, 但可以進行查詢
insert、delete、update:加寫鎖之后別人不能查、不能改
鎖粒度:
表級鎖:myisam
行級鎖:innodb
調優:
1. 選擇合適的存儲引擎
2. 常用字段建立索引
3.where 避免使用 !=、NULL 判斷、or 鏈接、
like 前置 %、in、not in、* 代替字段、
數據類型:
數據類型:
int 大整型(4 個字節) 2**32 – 1(4294967295)
tinyint 微小整型(一個字節)
有符號(signed 默認):-128 ~ 127
無符號(unsigned):0 ~ 255
smallint 小整型(2 字節)
bigint 極大整型(8 字節)
float 浮點數(4 個字節,7 個有效位)
字段名 float(m,n)m:總位數 n:小數位數
decimal 浮點數(28 個有效位)
字段名 decimal(m,n)m:總位數 n:小數位數
將 9 的倍數包裝成 4 個字節
余數 字節
0 0
1-2 1
3-4 2
5-6 3
7-9 4
字段名 enum(值 1,值 2…); 單選(enum)
字段名 set(值 1,值 2…); 多選(set)
(多項放在一個字符串內用,號隔開)
date:“YYYY-MM-DD”
time:“HH:MM:SS”
datetime:“YYYY-MM-DD HH:MM:SS”
timestamp:“YYYY-MM-DD HH:MM:SS”
datetime:不給值默認返回 Null
timestamp:不給值默認返回系統時間
時間函數
now() 返回服務器當前的時間
curdate() 返回當前時期
curtime() 返回當前日期
year(date) 返回指定時間的年份
date(date) 返回指定時間的日期
time(date) 返回指定時間的時間
聚合函數
avg(字段名):求該字段的平均值
sum(字段名):求和
max(字段名):最大值
min(字段名):最小值
count(字段名):統計該字段的個數
運算符:+ – * / %
時間運算符
select * from 表名
where 字段名 運算符(時間 -interval 時間間隔單位);
時間間隔單位:1 day | 2hour | 1 minute | 2year | month
數值比較:= != = =
字符比較:= !=
邏輯比較:and or
范圍內比較:
1.where 字段名 between 值 1 and 值 2
2.where 字段名 in(值 1,值 2,….)
3.where 字段名 not in(值 1,值 2,…)
空:where name is null
非空:where name is not null
NILL:空值,只能用 is 或 is not 取匹配
“”:空字符串,用 = 或 != 去匹配
模糊比較:
where 字段名 like 表達式
表達式
_ : 匹配單個字符
%:匹配 0 到多個字符
NULL 不會被統計
排序:order by ASC | DESC
顯示:limit 開始顯示位置,條數
每頁顯示 n 條記錄,顯示第 m 頁:
limit(m-1)*n,n
MySQL 與 Python 交互
# mysqlpython.py
# 導入 mysql 模塊
from pymysql import *
def __init__(self, database, # 庫
host= 127.0.0.1 , # ip 地址
user= root , # 用戶名
password= 123456 , # 密碼
port=3306, # 端口
charset= utf8 ): # 字符集
self.host = host
self.database = database
self.user = user
self.password = password
self.port = port
self.charset = charset
def open(self): # 創建數據庫鏈接函數
self.db = connect(host=self.host,
database=self.database,
user=self.user,
password=self.password,
port=self.port,
charset=self.charset)
self.cur = self.db.cursor() # 創建游標對象
def close(self): # 創建斷開數據庫鏈接 關閉游標函數
self.cur.close()
self.db.close()
def zhixing(self, sql, L=[]): # 創建 pymysql.execute() 方法函數
try:
self.open() # 鏈接數據庫
self.cur.execute(sql, L) # 參數化執行SQL命令
self.db.commit() # 提交數據
print(ok)
except Exception as e:
self.db.rollback() # 出錯取消提交
print(Failed , e)
self.close() # 斷開數據庫鏈接 關閉游標
def all(self, sql, L=[]):
try:
self.open()
self.cur.execute(sql, L)
result = self.cur.fetchall()
return result
except Exception as e:
print(Failed , e)
self.close()
數據庫用戶登錄
from mysqlpython import Mysqlpython
from hashlib import sha1
uname = input(請輸入用戶名:)
pwd = input(請輸入密碼:)
# 用 sha1 給 pwd 加密
s1 = sha1() # 創建 sha1 加密對象
s1.update(pwd.encode( utf8)) # 指定編碼
pwd2 = s1.hexdigest() # 返回 16 進制加密結果
sqlh = Mysqlpython(db4)
select = select password from user where
username=%s;
result = sqlh.all(select, [uname])
# print(result)
# ((7c4a8d09ca3762af61e59520943dc26494f8941b ,),)
if len(result) == 0:
print(用戶名不存在)
elif result[0][0] == pwd2:
print(登錄成功)
else:
print(密碼錯誤)
ORM sqlalchemy 框架
# 創建一張表 # 連接數據庫的模塊 from
sqlalchemy import create_engine fromsqlalchemy.ext.declarative
import declarative_base from sqlalchemy import Column, Integer
,String engine = create_engine( mysql+pymysql://root:123456@localhost/db4 ,
encoding= utf8 ) Base = declarative_base() # orm 基類 class User(Base):
# 繼承 Base 基類 __tablename__ = t123 id =Column(Integer, primary_key=True)
name = Column(String(20)) address = Column(String(40))Base.metadata.create_all
(engine)
感謝各位的閱讀!關于 Python 全棧介紹 MySQL 數據庫的示例就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
向 AI 問一下細節
丸趣 TV 網 – 提供最優質的資源集合!