《《第24天》mysql和sqlite講解以及python操縱》要點:
本文介紹了《第24天》mysql和sqlite講解以及python操縱,希望對您有用。如果有疑問,可以聯系我們。
(首先感謝一下打賞我的司機,我這里貌似看不到是誰,謝謝支持!)
今天主要講一下sqlite3數據庫和mysql數據庫,告訴大家如何快速的上手數據庫把持.最后講一下,在linux中,我們如何用shell和python實現通訊錄的功能,另外使用python如何把持sqlite3和mysql數據庫.今天講的內容有點多,所以python實戰放到明天講,到時候會實現python-mysql/sqlite實現一個小項目,希望大家關注一波!
開班第二十四天:
本日的課程大綱:
數據庫基本信息的講解
博客類和嵌入式數據庫
工作中如何快速安裝初始化mysql
作為數據庫管理員的實際需求實戰
shell和python操作數據庫
詳細講解:
數據庫基本信息的講解
數據庫一般分為關系型和非關系型數據庫,我們平時所了解的數據庫有很多,例如oracle,mysql,sqlserver,db2,postgresql,sqlite等等,但是這里我們要糾正一下,上面所涉及到的,都叫數據庫管理系統(DBMS),只不過我們習慣性的稱為什么什么數據庫,數據庫都是以文件的形式最終存在磁盤或者內存中,但是存放在內存中的數據有一個特點便是臨時,易丟失,占用內存.
統一操作數據庫的語言為SQL語言,SQL語言主要有四個方面:
數據把持語言(DML):主要為增刪改
數據定義語言(DDL):create,alter,rename,drop,truncate等
數據控制語言(DCL):grant,revoke,權限有關
事務控制語言
而事務呢,也是一個很重要的概念,它是一個完整工作和任務的完成,它有四個特點(ACID),下面是我從維基百科上截取的:
博客類和嵌入式數據庫
我們所認識的博客類和嵌入式數據庫都是小型的,非關系型的,好比我們所熟知的sqlite,它就是一個嵌入式數據庫,這里我舉一個它的應用,我們手機上的通訊錄,信息一般都是存放在sqlite中的,這種數據庫不需要連接,直接數據庫文件和腳本文件一起拷貝走,就可以了.而且它的查詢速度非常快,也很方便,適合在移動設備上使用.
工作中如何快速安裝初始化mysql
這里我先講一下mysql,mysql是全球應用最多的一個數據庫,它是一個關系型數據庫,之前是sun公司的,后來被oracle收購,但是開源是堅持的,平常呢,我們可以使用社區版也就是免費版.當然也有企業版.今后呢,一般的公司用的多的還是mysql數據庫.講到mysql,當然要講一下postgresql,這個數據庫在國外相對流行,國內呢,不算很流行,感興趣的朋友可以去了解一下,一些外企好像挺多用這個的.
還必要講一下mysql是c/s模型的,也就是它必要進行客戶端與服務端的連接,連接方式有兩種,一種是套接字文件,另一種是通過網絡連接.接下來我要講一下如何來安裝mysql和快速的初始化mysql.
1.安裝mysql,yum install mysql-server,它的安裝會自動安裝一個命令行的客戶端.
2.什么都不要想,啟動服務,service mysqld restart,第一次啟動會有一些提示信息,有興趣可以了解,不外我這里是快速教程,直接跳過.
3. mysql_secure_installation,初始化,這也是平時用的最多的方法對數據庫進行初始化.除了要輸入暗碼,其他的全部回車就行.ok了!
4.設置默認的字符集,在我們安裝好之后,字符集都是latin1的,所以要改成utf8,這里說一下字符集,在mysql中,客戶端和服務端中的數據庫以及數據庫中的表,字符集要一致,否則就是亂碼,那么我們就直接設置成utf8更好.首先在服務端設置,vim /etc/my.cnf,在mysqld下添加一行:default-character-set = utf8(重啟服務),接著在客戶端設置,這里我直接用本機當服務端和客戶端,我可以設置一個mysql快捷連接啟動的文件,這樣我直接在終端里運行mysql,就自動連接到mysql數據庫了.這個文件為:vim ~/.my.cnf,文件不存在,自己添加.暗碼自己設置成自己的暗碼.這里需要注意的是user = root 不是我們系統中root,而是mysql中的root.
5.這樣就初始化好了,運行mysql,進入.
作為數據庫管理員的實際需求實戰
實戰的前提是必要知道基本知識:
1.創建刪除數據庫
create database db01; drop database db01;
也可以直接toch /var/lib/mysql/db01,但是這樣權限會有問題.
2.創建刪除表(首先use db01)
create table t01(id,name); drop table t01; create table t02 like t01; delete from t01 where id=1;
3.查詢
select id ,name as "姓名" ,tel "電話" from t01;
4.插入
insert into t01 values(....);
insert into t01 select * from t02 ON DUPLICATE KEY UPDATE tel=t01.tel;
5.更新
update t01 set password=password("*****") where id=1;
實戰任務:
1.創建一個用戶:grant all on db01.* to user1 identified by 'password'; create user user1@ip identified by 'passwd';
(grant命令,當user1不存在的時候,會直接創建user1并設置暗碼,如果user1存在,那么起到的作用就是修改暗碼的作用)
2.長途連接數據庫:mysql -h ip -u username -ppasswd;
3.為其他普通用戶修改暗碼: grant usage on *.* to username@ip identified by "uplooking";
4.mysql普通用戶自己修改暗碼:
服務端要給這個普通用戶super權限,grant super on *.* to username@ip;
然后可以本身修改,mysqladmin -h 服務器ip -u username -poldpass password 'newpass';
5.忘記root暗碼:mysql啟動跳過權限檢查,更新mysql.user表中的password字段,重新啟動
修改vim ~/.my.cnf 或者 vim /etc/my.cnf,添加一行skip-grant-tables
如果是修改/etc/my.cnf,就要重啟服務,然后執行update mysql.user set password=password("newpass") where user="root" and host="localhost";
注釋掉skip-grant-tables
重啟服務,連接數據庫就可以勝利了
6.回收權限:
show grants for username;(查看用戶所有的權限)
revoke select on app01.* from username;
本來username這個用戶對app01.*有all的權限,現在去掉select權限
7.給普通用戶添加授權的權限
grant usage on *.* to tom with grant option;
我給tom用戶添加了一個grant option權限,那么tom用戶就可以把本身所擁有的權限賦予給其他普通用戶.
shell和python操作數據庫
**針對與sqlite3數據庫:
1.shell把持,直接使用sqlite3 name.db "select * from name",就可以了
2.python把持,這里我們要學習一個python模塊為sqlite3,python連接sqlite3的步驟很明確,分為以下幾步:
import sqlite3
<1>創建連接
conn = sqlite3.connect("py.db")
<2>創建游標
cursor = conn.cursor()
<3>執行語句
cursor.execute("select * from pydb")
for row in cursor:
print row
<4>提交事務,關閉游標,關閉連接
conn.commit()
cursor.close()
conn.close()
**針對與mysql數據庫:
1.shell把持:mysql -u root -ppassword -N -B -e "select * from t01" db01
-N表現不顯示字段名,-B表現不顯示表格外框,-e后面跟執行sql語句,執行多個sql語句可以用;隔開
2.python把持:
python要連接mysql,要使用連接器進行連接,官方提供了一個純python寫的connector連接器,紅帽光盤里也提供了一個連接器:mysqldb,它是構建在mysql-lib C語言庫之上的,所以我們一般選擇紅帽子提供的mysqldb來進行實現python連接mysql.原理和python把持sqlite一樣,都是要創建連接游標,只不過剛開始要先認證連接,
<1>yum install MySQL-python , import MySQLdb,注意大小寫要區分
<2> conn = MySQLdb.connect(host="",port="",user="",passwd="",db="",charset="utf8")
<3>我們每次在連接時候很麻煩,我們直接就可以把連接信息寫在一個字典中,然后通過字典調用就行.**config代表把字典當成一個類似user="root"來處理.
總結:
今天主要講了數據庫的基本概念,以及工作中作為數據庫管理員經常遇到的問題解決辦法.內容很多,我不可能全部講完而且很詳細,我只能大概的講一下重要的,我這里有一些文檔,官方的,大家平時可以多閱讀官方文檔,這樣有助于提高自己的能力.需要的在公眾號中回復python_mysql.
頭條號:愛家人愛老婆的IT男
QQ群:145252709,我會上傳資源,同時會有很多大神跟你們討論學習分享
微信公眾號:法式猿的野生香蕉
歡迎參與《《第24天》mysql和sqlite講解以及python操縱》討論,分享您的想法,維易PHP學院為您提供專業教程。