新聞中心
實(shí)戰(zhàn)數(shù)據(jù)庫(kù):學(xué)習(xí)mysql的更佳示范

創(chuàng)新互聯(lián)擁有網(wǎng)站維護(hù)技術(shù)和項(xiàng)目管理團(tuán)隊(duì),建立的售前、實(shí)施和售后服務(wù)體系,為客戶提供定制化的網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、網(wǎng)站維護(hù)、聯(lián)通機(jī)房服務(wù)器托管解決方案。為客戶網(wǎng)站安全和日常運(yùn)維提供整體管家式外包優(yōu)質(zhì)服務(wù)。我們的網(wǎng)站維護(hù)服務(wù)覆蓋集團(tuán)企業(yè)、上市公司、外企網(wǎng)站、電子商務(wù)商城網(wǎng)站建設(shè)、政府網(wǎng)站等各類型客戶群體,為全球數(shù)千家企業(yè)提供全方位網(wǎng)站維護(hù)、服務(wù)器維護(hù)解決方案。
MySQL是一款強(qiáng)大的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),廣泛用于各種企業(yè)和站點(diǎn)應(yīng)用。學(xué)習(xí)MySQL可以讓你進(jìn)入數(shù)據(jù)庫(kù)領(lǐng)域,并獲得四個(gè)基本特性:容錯(cuò)性、可靠性、可擴(kuò)展性和可維護(hù)性,讓你熟練掌握數(shù)據(jù)的存儲(chǔ)、查詢、更新、刪除等常用操作。
為了使大家能夠深入了解MySQL,我們將推薦一個(gè)更佳示范,它能幫助大家更快地學(xué)會(huì)MySQL,并提高實(shí)際的應(yīng)用水平。
之一步:安裝MySQL
在學(xué)習(xí)MySQL之前,你需要先在你的電腦上安裝MySQL,你可以去MySQL官網(wǎng)(https://www.mysql.com/)下載適用于你的操作系統(tǒng)的版本,然后開(kāi)始安裝。
安裝過(guò)程中,你需要為MySQL設(shè)置一個(gè)root用戶的密碼,這個(gè)密碼是你將來(lái)訪問(wèn)和管理MySQL時(shí)需要使用的密碼,所以要牢記。
在安裝完成后,你需要打開(kāi)MySQL的命令行客戶端,輸入root用戶密碼,進(jìn)入MySQL的控制臺(tái)。你可以運(yùn)行簡(jiǎn)單的SQL命令,并查看MySQL控制臺(tái)的響應(yīng)。
第二步:學(xué)習(xí)SQL語(yǔ)句
在MySQL中,所有的操作都是通過(guò)SQL語(yǔ)句來(lái)完成的,因此,學(xué)習(xí)SQL語(yǔ)句是學(xué)習(xí)MySQL的必備基礎(chǔ)。SQL是一種強(qiáng)大的查詢語(yǔ)言,可以用來(lái)存儲(chǔ)、管理和操作數(shù)據(jù)。
SQL主要包括以下語(yǔ)句:SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、ALTER等語(yǔ)句。通過(guò)學(xué)習(xí)這些 SQL 語(yǔ)句,你可以實(shí)現(xiàn)各種數(shù)據(jù)的讀寫(xiě),建表、刪表、改表等操作。
第三步:創(chuàng)建數(shù)據(jù)庫(kù)、表
了解了SQL語(yǔ)言之后,我們需要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫(kù)。在MySQL中,我們可以通過(guò)CREATE DATABASE語(yǔ)句實(shí)現(xiàn)。
例如,我們可以創(chuàng)建一個(gè)名為testdb的數(shù)據(jù)庫(kù):
CREATE DATABASE testdb;
創(chuàng)建數(shù)據(jù)庫(kù)后,我們需要在該數(shù)據(jù)庫(kù)中創(chuàng)建表,這是存儲(chǔ)數(shù)據(jù)的重要結(jié)構(gòu)。在MySQL中,可以通過(guò)CREATE TABLE語(yǔ)句來(lái)創(chuàng)建數(shù)據(jù)表。
例如,我們可以創(chuàng)建一個(gè)名為users的表:
CREATE TABLE users (
id ALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
age TINYINT UNSIGNED
);
這個(gè)創(chuàng)建用戶表的例子中,我們定義了id、name、age三個(gè)字段,其中id是整數(shù)類型的自增主鍵,name是20個(gè)字符長(zhǎng)度的字符串類型,age是無(wú)符號(hào)8位整數(shù)類型。
第四步:插入數(shù)據(jù)
一旦創(chuàng)建了數(shù)據(jù)表,下一步就是插入數(shù)據(jù)。與創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)表相比,插入數(shù)據(jù)是一個(gè)更加生動(dòng)、實(shí)際、易于理解的操作。
在MySQL中,使用INSERT INTO語(yǔ)句插入數(shù)據(jù)。例如:
INSERT INTO users (name, age) VALUES (‘Tom’, 25);
INSERT INTO users (name, age) VALUES (‘Jerry’, 22);
以上語(yǔ)句將向users表中插入兩條數(shù)據(jù),一條名字為T(mén)om,年齡為25歲;一條名字為Jerry,年齡為22歲。
第五步:查詢數(shù)據(jù)
一旦有了數(shù)據(jù),最常見(jiàn)的操作是查詢數(shù)據(jù)。在MySQL中,通過(guò)SELECT語(yǔ)句查詢數(shù)據(jù)。
例如:
SELECT * FROM users;
SELECT name, age FROM users WHERE age > 20;
之一個(gè)語(yǔ)句將查詢Users表的所有信息,第二個(gè)語(yǔ)句將查詢Users表中年齡大于20的用戶的姓名和年齡。
你可以通過(guò)SQL在這個(gè)表中提取大量的信息,例如查詢所有用戶、查詢年齡大于30的用戶、查詢按姓名排序等等。
第六步:更新和刪除數(shù)據(jù)
更新和刪除數(shù)據(jù)操作也是數(shù)據(jù)操作中最常見(jiàn)的操作之一,更新數(shù)據(jù)通過(guò)UPDATE語(yǔ)句操作,而刪除數(shù)據(jù)則使用DELETE語(yǔ)句操作。
例如:
UPDATE users SET age = 30 WHERE name = ‘Tom’;
DELETE FROM users WHERE age > 20;
以上語(yǔ)句將更新年齡為30歲的用戶年齡,而將刪除年齡大于20的用戶信息。
MySQL是一個(gè)非常強(qiáng)大的數(shù)據(jù)庫(kù)管理系統(tǒng),各種企業(yè)和站點(diǎn)都廣泛使用它。為了能夠?qū)W習(xí)MySQL,我們首先需要學(xué)習(xí)SQL語(yǔ)句,可以了解到SQL是由眾多常用語(yǔ)句構(gòu)成的,例如SELECT、INSERT、UPDATE和DELETE等語(yǔ)句。
我們需要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫(kù)和數(shù)據(jù)表,并用SQL批量插入數(shù)據(jù)。我們需要使用SELECT語(yǔ)句查詢數(shù)據(jù)、使用UPDATE語(yǔ)句更新數(shù)據(jù)、使用DELETE語(yǔ)句刪除數(shù)據(jù),以便加深對(duì)MySQL會(huì)話的理解。
通過(guò)愛(ài)好和專業(yè)權(quán)威的在線教育網(wǎng)站,掌握最新、實(shí)戰(zhàn)的MySQL基礎(chǔ)知識(shí),實(shí)現(xiàn)MySQL學(xué)習(xí)的更佳示范。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來(lái)專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220怎么用python連接mysql數(shù)據(jù)庫(kù)
連接數(shù)據(jù)庫(kù)
conn = MySQLdb.Connect(
host = ‘localhost’,
port = 3306,
user = ‘root’,
passwd = ”,
db = ‘mytest’,
charset = ‘utf8’
)
更森雀慎多python操作歲伍mysql數(shù)此敬據(jù)庫(kù)的知識(shí)點(diǎn)與實(shí)例demo講解
在 Python 語(yǔ)言環(huán)境下我們這樣連接數(shù)據(jù)庫(kù)。
In : from mysql import connector
In : cnx = connector.connect(host=”172.16.192.100″,port=3306,user=”appuser”,password=”xxxxxx”)
但是連接數(shù)據(jù)庫(kù)的背后發(fā)生了什么呢?
答案
當(dāng)我們通過(guò)驅(qū)動(dòng)程序(mysql-connector-python,pymysql)連接 MySQL 服務(wù)端的時(shí)候,就是把連接參數(shù)傳遞給驅(qū)動(dòng)程序,驅(qū)動(dòng)程序再根據(jù)參數(shù)會(huì)發(fā)起到 MySQL 服務(wù)端的 TCP 連接。當(dāng) TCP 連接建立之后驅(qū)動(dòng)程序與服務(wù)端之間會(huì)按特定的格式和次序交換數(shù)據(jù)包,數(shù)據(jù)包的格式和發(fā)送次序由 MySQL 協(xié)議 規(guī)定。MySQL 協(xié)議: MySQL 服務(wù)端與驅(qū)動(dòng)程序之間,按如下的次序發(fā)送了這些包。
MySQL 服務(wù)凳塵端向客戶端發(fā)送一個(gè)握手包,包里記錄了 MySQL-Server 的版本,默認(rèn)的授權(quán)插件,密碼鹽值(auth-data)。
2. MySQL 客戶端發(fā)出 ssl 連接請(qǐng)求包(如果有必要的話)。
3. MySQL 客戶端發(fā)出握手包的響應(yīng)包,這個(gè)包時(shí)記錄了用戶名,密碼加密后的串,客戶端御漏屬性,等等其它信息。
4. MySQL 服務(wù)端發(fā)出響應(yīng)包,這個(gè)包里記錄了登錄棗拆禪是否成功,如果沒(méi)有成功也會(huì)給出錯(cuò)誤信息。
1、和數(shù)據(jù)庫(kù)建立連接
2、執(zhí)行sql語(yǔ)句,接收返回值
3、關(guān)閉數(shù)據(jù)庫(kù)連接
1、MySQL數(shù)據(jù)庫(kù)要用MySQLdb模塊,但Python用來(lái)鏈接MySQL的第三方庫(kù)MySQLdb不支持Python3.x
特別說(shuō)明:我在我的電腦上實(shí)驗(yàn)時(shí),我的python是2.7.2版本,安裝對(duì)應(yīng)版本的MySQLdb之后直接可以運(yùn)行,并與數(shù)據(jù)庫(kù)連接成功,所以如果大家也像我一樣順利的話,下面的就不需要看了,直接跳過(guò),看第2點(diǎn)如何執(zhí)行sql語(yǔ)句即可!如果安裝之后出現(xiàn)異常,可以參考一下下面的解決辦法。
連接的關(guān)鍵并配遲是安裝MySQLdb模塊要下載與Python相對(duì)應(yīng)的版本:
下載好后安裝,它會(huì)自動(dòng)檢測(cè)到計(jì)算機(jī)Python的安裝路徑,并自動(dòng)填寫(xiě)模塊解壓路徑(我的是:D:\ProgramFiles\ActivePython 2.6.6.17\Lib\site-packages\)。
但解壓完成后并不能使用,還要修改MySQLdb模塊下的一些文件:
①.在MySQLdb目錄下(我的是:D:\ProgramFiles\ActivePython 2.6.6.17\Lib\site-packages\MySQLdb)找到__init__.py:
注釋第34、35行的from setsimport ImmutableSet、class DBAPISet(ImmutableSet):,在后面賣(mài)晌添加class DBAPISet(frozenset):
# from sets import ImmutableSet
# class DBAPISet(ImmutableSet):
class DBAPISet(frozenset):
②.打開(kāi)converters.py:
注釋第37行的from sets import BaseSet, Set,將第45行的return Set()中的Set改為set;同樣將第129行的Set: Set2Str,中的Set改為set(不要修改Set2Str),到這里就修改完畢了
2.建立數(shù)據(jù)庫(kù)連接
import MySQLdb
conn=MySQLdb.connect(host=”localhost”,user=”root”,passwd=”sa”,db=”mytable”)
比較常用的參數(shù)包括
host: 連接的數(shù)據(jù)庫(kù)服務(wù)器主機(jī)名,默認(rèn)為本地主機(jī)(localhost)。
user:數(shù)據(jù)庫(kù)登陸名.默認(rèn)是當(dāng)前用戶.
passwd:數(shù)據(jù)庫(kù)登陸的秘密.默認(rèn)為空.
db:要使用的數(shù)據(jù)庫(kù)名.沒(méi)有默認(rèn)值.
port:MySQL服務(wù)使用的TCP端口.默認(rèn)是3306.
conn連接有兩個(gè)重要的方法commit【提交新增和修改】,rollback【撤銷新增或修改】
3、執(zhí)行數(shù)據(jù)庫(kù)操作
n=cursor.execute(sql,param)
我們要使用連接對(duì)象獲得一個(gè)cursor對(duì)象,接下來(lái),我們會(huì)使用cursor提供的方法來(lái)進(jìn)行工作.
這些方法包括兩大類:1.執(zhí)行命令,2.接收返回值
cursor用來(lái)執(zhí)行命令的方法:
callproc(self, procname, args):用來(lái)執(zhí)行存儲(chǔ)過(guò)程,接收的參數(shù)為存儲(chǔ)過(guò)程名和參數(shù)列表,返回值為受影響的行數(shù)
execute(self, query, args):執(zhí)行單條sql語(yǔ)句,接收的參數(shù)為sql語(yǔ)句本身和使用的參數(shù)列表,返回值為受影響的行數(shù)
executemany(self, query, args):執(zhí)行單挑sql語(yǔ)句,但是重復(fù)執(zhí)行參數(shù)列表里的參數(shù),返回值為受影響的行數(shù)
nextset(self):移動(dòng)到下一個(gè)結(jié)果集
cursor用來(lái)接收返回值的方法:
fetchall(self):接收全部的返回結(jié)果行.
fetchmany(self, size=None):接收size條返回結(jié)果行.如果size的值大于返回的結(jié)果行的數(shù)量,則會(huì)返回cursor.arraysize條數(shù)據(jù).
fetchone(self):返回一條結(jié)果行.
scroll(self, value, mode=’relative’):移動(dòng)指針到某一行.如果mode=’relative’,則表示從當(dāng)前所在行絕李移動(dòng)value條,如果mode=’absolute’,則表示從結(jié)果集的之一行移動(dòng)value條.
下面的代碼是一個(gè)完整的例子.
#使用sql語(yǔ)句,這里要接收的參數(shù)都用%s占位符.要注意的是,無(wú)論你要插入的數(shù)據(jù)是什么類型,占位符永遠(yuǎn)都要用%s
sql=”insert into cdinfo values(%s,%s,%s,%s,%s)”
#param應(yīng)該為tuple或者list
param=(title,singer,imgurl,url,alpha)
#執(zhí)行,如果成功,n的值為1
n=cursor.execute(sql,param)
#再來(lái)執(zhí)行一個(gè)查詢的操作
cursor.execute(“select * from cdinfo”)
#我們使用了fetchall這個(gè)方法.這樣,cds里保存的將會(huì)是查詢返回的全部結(jié)果.每條結(jié)果都是一個(gè)tuple類型的數(shù)據(jù),這些tuple組成了一個(gè)tuple
cds=cursor.fetchall()
#因?yàn)槭莟uple,所以可以這樣使用結(jié)果集
print cds
#或者直接顯示出來(lái),看看結(jié)果集的真實(shí)樣子
print cds
#如果需要批量的插入數(shù)據(jù),就這樣做
sql=”insert into cdinfo values(0,%s,%s,%s,%s,%s)”
#每個(gè)值的為一個(gè)tuple,整個(gè)參數(shù)集組成一個(gè)tuple,或者list
param=((title,singer,imgurl,url,alpha),(title2,singer2,imgurl2,url2,alpha2))
#使用executemany方法來(lái)批量的插入數(shù)據(jù).這真是一個(gè)很酷的方法!
n=cursor.executemany(sql,param)
需要注意的是(或者說(shuō)是我感到奇怪的是),在執(zhí)行完插入或刪除或修改操作后,需要調(diào)用一下conn.commit()方法進(jìn)行提交.這樣,數(shù)據(jù)才會(huì)真正保存在數(shù)據(jù)庫(kù)中.我不清楚是否是我的mysql設(shè)置問(wèn)題,總之,今天我在一開(kāi)始使用的時(shí)候,如果不用commit,那數(shù)據(jù)就不會(huì)保留在數(shù)據(jù)庫(kù)中,但是,數(shù)據(jù)確實(shí)在數(shù)據(jù)庫(kù)呆過(guò).因?yàn)樽詣?dòng)編號(hào)進(jìn)行了累積,而且返回的受影響的行數(shù)并不為0.
4、關(guān)閉數(shù)據(jù)庫(kù)連接
需要分別的關(guān)閉指針對(duì)象和連接對(duì)象.他們有名字相同的方法
cursor.close()
conn.close()
5、
5 編碼(防止亂碼)
需要注意的點(diǎn):
1 Python文件設(shè)置編碼 utf-8 (文件前面加上 #encoding=utf-8)
2 MySQL數(shù)據(jù)庫(kù)charset=utf-8
3 Python連接MySQL是加上參數(shù) charset=utf8
4 設(shè)置Python的默認(rèn)編碼為 utf-8 (sys.setdefaultencoding(utf-8)
#encoding=utf-8
import sys
import MySQLdb
reload(sys)
sys.setdefaultencoding(‘utf-8’)
db=MySQLdb.connect(user=’root’,charset=’utf8′)
注:MySQL的配置文件設(shè)置也必須配置成utf8
6.模塊功能演示
#!/usr/bin/python
import MySQLdb
Con= MySQLdb.connect(host=’localhost’,user=’root’,passwd=’root’,db=’abc’)
cursor =con.cursor()
sql =”select * from myt”
cursor.execute(sql)
row=cursor.fetchone()
print row
cursor.close()
con.close()
執(zhí)行以下SQL語(yǔ)句獲取返回值:
//獲取連接的游標(biāo)
cursor=conn.cursor()
//查詢
sql = “select * from 【table】”
//新增
sql = “insert into 【table】(字段,字段) values(值,值)”
//修改
sql = “update 【table】 set 字段 =‘值’where 條件 “
//刪除
sql = “delete from 【table】where 條件”
cursor.execute(sql)
返回值
cur.execute(‘select * from tables’)
其返回值為SQL語(yǔ)句得到的行數(shù),如:2L,表示2行。
然后,可以從該對(duì)象的fetchone或fetchall方法得到行信息。
獲取行信息
指針對(duì)象的fetchone()方法,是每次得到一行的tuple返回值:
引用
>>> row=cur.fetchone()
>>> print row
(‘user1′, ’52c69e3ac4e69d3f2e’, 1000L, 1000L, ‘/home/FTP/user1’,”)
指針對(duì)象的fetchall()方法,可取出指針結(jié)果集中的所有行,返回的結(jié)果集一個(gè)元組(tuples):
引用
>>> cur.scroll(0,’absolute’)
>>> row=cur.fetchall()
>>> print row
((‘user1′, ’52c69e3ac4e69d3f2e’, 1000L, 1000L, ‘/home/FTP/user1’,”), (‘user2’, ‘7e58d63b60197ceb55a1c487989a3720′, 1000L, 1000L,’/home/FTP/user2’, None))
移動(dòng)指針
當(dāng)使用fetchone()方法是,指針是會(huì)發(fā)生移動(dòng)的。所以,若不重置指針,那么使用fetchall的信息將只會(huì)包含指針后面的行內(nèi)容。
手動(dòng)移動(dòng)指針使用:
cur.scroll(int,parm)
含義為:
引用
int:移動(dòng)的行數(shù),整數(shù);在相對(duì)模式下,正數(shù)向下移動(dòng),負(fù)值表示向上移動(dòng)。
parm:移動(dòng)的模式,默認(rèn)是relative,相對(duì)模式;可接受absoulte,絕對(duì)模式。
修改數(shù)據(jù)
修改數(shù)據(jù),包括插入、更新、刪除。它們都是使用指針對(duì)象的execute()方法執(zhí)行:
cur.execute(“insert into table (row1, row2) values (‘111’, ‘222’)”)
cur.execute(“update table set row1 = ‘test’ where row2 = ‘row2’ “)
cur.execute(“delete from table where row1 = ‘row1’ “)
因單引號(hào)“’”用于SQL語(yǔ)句中的標(biāo)識(shí),所以,python中的字符串需使用雙引號(hào)括住。
此外,也可以使用python的“格式化字符串”寫(xiě)法,簡(jiǎn)化命令,例如:
cur.execute(“update table set row1 = ‘%s’ where row2 = ‘%s’ “%(‘value1′,’value2’))
※請(qǐng)注意,’%s’的單引號(hào)是SQL語(yǔ)句的間隔符,’value1’的單引號(hào)是python的字符串間隔符,其含義是不同的。是否需要間隔符,以及使用雙引號(hào)還是單引號(hào)作為間隔,需根據(jù)其含義決定。例如,還有:
cur.execute(“update FTPUSERS set passwd=%s where userid=’%s’ “%(“md5(‘123′)”,’user2’))
這里,paswd=%s是因SQL的md5()函數(shù)是不需要單引號(hào)間隔的;”md5(‘123’)”是python的字符串中含有單引號(hào),所以用雙引號(hào)括住。
提交修改
一般情況下,MySQLdb模塊會(huì)自動(dòng)提交修改。但我們?cè)诟聰?shù)據(jù)后,手動(dòng)運(yùn)行一次:
conn.commit()
關(guān)閉數(shù)據(jù)庫(kù)連接
需要分別的關(guān)閉指針對(duì)象和連接對(duì)象.他們有名字相同的方法
cursor.close()
關(guān)于mysql數(shù)據(jù)庫(kù)demo的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)【028-86922220】值得信賴的成都網(wǎng)站建設(shè)公司。多年持續(xù)為眾多企業(yè)提供成都網(wǎng)站建設(shè),成都品牌建站設(shè)計(jì),成都高端網(wǎng)站制作開(kāi)發(fā),SEO優(yōu)化排名推廣服務(wù),全網(wǎng)營(yíng)銷讓企業(yè)網(wǎng)站產(chǎn)生價(jià)值。
分享題目:實(shí)戰(zhàn)數(shù)據(jù)庫(kù):學(xué)習(xí)mysql的更佳示范(mysql數(shù)據(jù)庫(kù)demo)
文章路徑:http://m.fisionsoft.com.cn/article/ccejidj.html


咨詢
建站咨詢
