溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

5.Python操作MySQL,三層架構(gòu),Socket網(wǎng)絡(luò)編程

發(fā)布時(shí)間:2020-07-17 19:09:20 來(lái)源:網(wǎng)絡(luò) 閱讀:1355 作者:yht_1990 欄目:數(shù)據(jù)庫(kù)

Python操作MySQL

- MySQL之查詢操作

- MySQL之插入數(shù)據(jù)

- MySQL之批量插入數(shù)據(jù)

- MySQL之刪除數(shù)據(jù)

- MySQL之更新數(shù)據(jù)庫(kù)

- MySQL之事務(wù)

- MySQL之批量獲取字典類(lèi)型數(shù)據(jù)

- MySQL之fetchone

- MySQL之獲取自增ID


三層架構(gòu)(程序分成三種架構(gòu))

- 三層架構(gòu)之公共層

- 三層架構(gòu)之model層

- 三層架構(gòu)之配置文件


Socket網(wǎng)絡(luò)編程


【Python操作MySQL】

準(zhǔn)備工作:

Windows下載鏈接,Python操作MySQL模塊:

http://pan.baidu.com/s/1o7JuMgU

提示:Windows安裝了mysql模塊后,因?yàn)槲矣玫氖荅clipse,所以我還要在Eclipse下做一下設(shè)置,如下:

在Eclipse菜單欄上點(diǎn)擊Windows->Preferences->PyDev-Interpreter-Python->Forced Builtins->New->MySQLdb->ok->Apply,必要時(shí)重啟Eclipse


Linux直接安裝Python操作MySQL模塊 yum -y install python-mysqldb


建表語(yǔ)句

create table students
    (
        id int  not null auto_increment primary key,
        name char(8) not null,
        sex char(4) not null,
        age tinyint unsigned not null,
        tel char(13) null default "-"
    );


插入數(shù)據(jù):

insert into students(name,sex,age,tel) values('wsyht','man',20,'1319')


數(shù)據(jù)庫(kù)和表

mysql> select database();
+------------+
| database() |
+------------+
| wsyht      |
+------------+
1 row in set (0.00 sec)
mysql> select *from students;
+----+---------+-----+-----+---------+
| id | name    | sex | age | tel     |
+----+---------+-----+-----+---------+
|  2 | wsyht   | man |  22 | 1231313 |
|  3 | jack    | man |  23 | 12313   |
|  4 | jenkins | man |  25 | 123     |
|  5 | peter   | man |  23 | 123     |
|  6 | wsyht90 | man |  23 | 123     |
|  8 | wsyht11 | man |  26 | 12345   |
|  9 | wsyht12 | man |  26 | 12345   |
| 10 | wsyht1  | man |  26 | 12345   |
| 11 | wsyht2  | man |  26 | 12345   |
+----+---------+-----+-----+---------+
9 rows in set (0.00 sec)


1)MySQL之查詢操作

import MySQLdb   #必須在導(dǎo)入MySQLdb模塊之前,要先裝python操作mysql模塊

   

#創(chuàng)建連接

conn = MySQLdb.connect(host='192.168.1.113',user='root',passwd='123456',db='wsyht') #這里可以理解為打開(kāi)門(mén)的鑰匙 
cur = conn.cursor()  #這里可以理解為伸出手,這里可以理解為伸出手,獲取表數(shù)據(jù)


#數(shù)據(jù)查詢操作

reCount = cur.execute('select * from students') #然后執(zhí)行動(dòng)作,只是查詢影響了多少行,并不是查詢相關(guān)表的數(shù)據(jù)
data = cur.fetchall()  #把select查詢影響到的行的數(shù)據(jù)全拿出來(lái)


#關(guān)閉連接

cur.close()   #收回手
conn.close()  #關(guān)門(mén)


#輸出信息

print reCount #輸出查詢影響到的行數(shù)
print data    #輸出查詢影響到的行的數(shù)據(jù)


2)MySQL之插入數(shù)據(jù)

import MySQLdb


#創(chuàng)建連接

conn = MySQLdb.connect(host='192.168.1.113',user='root',passwd='123456',db='wsyht') #這里可以理解為打開(kāi)門(mén)的鑰匙 
cur = conn.cursor()  #這里可以理解為伸出手,這里可以理解為伸出手,獲取表數(shù)據(jù)


#數(shù)據(jù)插入操作

sql = "insert into students(id,name,sex,age,tel) values(%s,%s,%s,%s,%s)" #不管什么類(lèi)型,占位符都是給%s,五個(gè)占位符,就給五個(gè)%s
params = ('6','peter','man','23','123')  #如果這里id設(shè)了自增,那么這排第一位和上面一排第一位id可以不用寫(xiě)
reCount = cur.execute(sql,params)  #插入數(shù)據(jù)   
conn.commit()  #提交數(shù)據(jù),insert,update,delete都要加commit,而select則不用


#關(guān)閉連接

cur.close()   #收回手
conn.close()  #關(guān)門(mén)
print reCount #輸出影響到的行數(shù)


3)MySQL之批量插入數(shù)據(jù)

import MySQLdb   #必入MySQLdb模塊之前,要先裝python操作mysql模塊


#創(chuàng)建連接

conn = MySQLdb.connect(host='192.168.1.113',user='root',passwd='123456',db='wsyht') #這里可以理解為打開(kāi)門(mén)的鑰匙
cur = conn.cursor()  #這里可以理解為伸出手,這里可以理解為伸出手,獲取表數(shù)據(jù)


#批量插入數(shù)據(jù)操作

li = [
    ('wsyht11','man','26','12345'),
    ('wsyht12','man','26','12345'),
]
#sql = 'insert into students(name,sex,age,tel) values(%s,%s,%s,%s)'
#reCount = cur.executemany(sql,li) 
reCount = cur.executemany('insert into students(name,sex,age,tel) values(%s,%s,%s,%s)',li)  #刪除數(shù)據(jù)
conn.commit()  #提交數(shù)據(jù),insert,update,delete都要加commit,而select則不用


#關(guān)閉連接

cur.close()   #收回手
conn.close()  #關(guān)門(mén)
print reCount #輸出影響到的行數(shù)


4)MySQL之刪除數(shù)據(jù)庫(kù)

import MySQLdb   #必入MySQLdb模塊之前,要先裝python操作mysql模塊


#創(chuàng)建連接

conn = MySQLdb.connect(host='192.168.1.113',user='root',passwd='123456',db='wsyht') #這里可以理解為打開(kāi)門(mén)的鑰匙
cur = conn.cursor()  #這里可以理解為伸出手,這里可以理解為伸出手,獲取表數(shù)據(jù)


#數(shù)據(jù)刪除操作

sql = "delete from students where id=%s" #不管什么類(lèi)型,占位符都是給%s,
params = (7,)  #把%s需要?jiǎng)h除的數(shù)據(jù)內(nèi)容添加到params變量就可以了,如果是字符,則需要用單引號(hào)引起來(lái)如:('n1',)
reCount = cur.execute(sql,params)  #刪除數(shù)據(jù)
conn.commit()  #提交數(shù)據(jù),insert,update,delete都要加commit,而select則不用


#關(guān)閉連接

cur.close()   #收回手
conn.close()  #關(guān)門(mén)
print reCount #輸出影響到的行數(shù)



5)MySQL之更新數(shù)據(jù)庫(kù)

import MySQLdb   #必入MySQLdb模塊之前,要先裝python操作mysql模塊


#創(chuàng)建連接

conn = MySQLdb.connect(host='192.168.1.113',user='root',passwd='123456',db='wsyht') #這里可以理解為打開(kāi)門(mén)的鑰匙
cur = conn.cursor()  #這里可以理解為伸出手,這里可以理解為伸出手,獲取表數(shù)據(jù)


#數(shù)據(jù)更新操作

sql = "update students set name=%s where id=6" #不管什么類(lèi)型,占位符都是給%s,
params = ('wsyht90')  #把id為6那一行數(shù)據(jù)中的name內(nèi)容改為wsyht90
reCount = cur.execute(sql,params)  #更新數(shù)據(jù)
conn.commit()  #提交數(shù)據(jù),insert,update,delete都要加commit,而select則不用


#關(guān)閉連接

cur.close()   #收回手
conn.close()  #關(guān)門(mén)
print reCount #輸出影響到的行數(shù)


6)事務(wù),要所有提交成功才會(huì)執(zhí)行成功

mysql> select *from students;
+----+---------+-----+-----+---------+
| id | name    | sex | age | tel     |
+----+---------+-----+-----+---------+
|  2 | wsyht   | man |  22 | 1231313 |
|  3 | jack    | man |  23 | 12313   |


import MySQLdb   #必入MySQLdb模塊之前,要先裝python操作mysql模塊
conn = MySQLdb.connect(host='192.168.1.113',user='root',passwd='123456',db='wsyht') #這里可以理解為打開(kāi)門(mén)的鑰匙
cur = conn.cursor()  #這里可以理解為伸出手
sql = "update students set age=%s where id=2"
params = (0)
reCount = cur.execute(sql,params)
sql = "update students set age=%s where id=3"
params = (46)
reCount = cur.execute(sql,params)
conn.commit()
cur.close()   #收回手
conn.close()  #關(guān)門(mén)
print reCount #輸出影響到的行數(shù)


mysql> select *from students;
+----+---------+-----+-----+---------+
| id | name    | sex | age | tel     |
+----+---------+-----+-----+---------+
|  2 | wsyht   | man |   0 | 1231313 |
|  3 | jack    | man |  46 | 12313   |


7)MySQL之批量獲取字典類(lèi)型數(shù)據(jù)

import MySQLdb   #必入MySQLdb模塊之前,要先裝python操作mysql模塊


#創(chuàng)建鏈接

conn = MySQLdb.connect(host='192.168.1.113',user='root',passwd='123456',db='wsyht') #這里可以理解為打開(kāi)門(mén)的鑰匙 
#cur = conn.cursor()  #這里可以理解為伸出手,這里可以理解為伸出手,獲取表數(shù)據(jù)
cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)  #以字典類(lèi)型獲取數(shù)據(jù),也就是獲取表的列名和列的數(shù)據(jù)


#數(shù)據(jù)操作

reCount = cur.execute('select * from students') #然后執(zhí)行動(dòng)作,只是查詢影響了多少行,并不是查詢相關(guān)表的數(shù)據(jù)
data = cur.fetchall()  #把select查詢影響到的行的數(shù)據(jù)全拿出來(lái)


#關(guān)閉連接

cur.close()   #收回手
conn.close()  #關(guān)門(mén)
print reCount #輸出查詢影響到的行數(shù)
print data    #輸出查詢影響到的行的數(shù)據(jù)



8)MySQL之fetchone

import MySQLdb
conn = MySQLdb.connect(host='192.168.1.113',user='root',passwd='123456',db='wsyht') #這里可以理解為打開(kāi)門(mén)的鑰匙 
cur = conn.cursor()  #這里可以理解為伸出手,獲取表數(shù)據(jù)
#cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)


#數(shù)據(jù)操作

reCount = cur.execute('select * from students') #然后執(zhí)行動(dòng)作,只是查詢影響了多少行,并不是查詢相關(guān)表的數(shù)據(jù)
data = cur.fetchone()  #只輸出取到數(shù)據(jù)的第一行
print data    #輸出查詢影響到的行的數(shù)據(jù)
#cur.scroll(0,mode='absolute')   #覺(jué)對(duì)模式,往上走一層,從重輸出
data = cur.fetchone()  #輸出取到數(shù)據(jù)的第二行
print data    #輸出查詢影響到的行的數(shù)據(jù)
cur.scroll(-1,mode='relative')  #相對(duì)模式,往上走一層,從重新輸出
data = cur.fetchone()  #輸出取到數(shù)據(jù)的第三行
cur.close()
conn.close()
print data    #輸出查詢影響到的行的數(shù)據(jù)



9)MySQL之獲取自增ID

#可看到下表ID是12,然后我插入三次數(shù)據(jù)就會(huì)變成十五,代碼如下所示

mysql> select *from students;
+----+-------+-----+-----+-------+
| id | name  | sex | age | tel   |
+----+-------+-----+-----+-------+
|  3 | jack  | man |  22 | 12313 |
| 12 | peter | man |  23 | 123   |
+----+-------+-----+-----+-------+


import MySQLdb
conn = MySQLdb.connect(host='192.168.1.113',user='root',passwd='123456',db='wsyht') #這里可以理解為打開(kāi)門(mén)的鑰匙 
cur = conn.cursor()  #這里可以理解為伸出手,獲取表數(shù)據(jù)


#數(shù)據(jù)操作

sql = "insert into students(name,sex,age,tel) values(%s,%s,%s,%s)" #不管什么類(lèi)型,占位符都是給%s,四個(gè)占位符,就給四個(gè)%s
params = ('peter','man','23','123')  
reCount = cur.execute(sql,params)  #插入數(shù)據(jù)   
conn.commit()  #提交數(shù)據(jù),insert,update,delete都要加commit,而select則不用
new_id = cur.lastrowid   #自動(dòng)自增ID
print new_id #輸出新的ID
#關(guān)閉連接
cur.close()   #收回手
conn.close()  #關(guān)門(mén)


#再次查看數(shù)據(jù)表

mysql> select *from students;
+----+-------+-----+-----+-------+
| id | name  | sex | age | tel   |
+----+-------+-----+-----+-------+
|  3 | jack  | man |  22 | 12313 |
| 12 | peter | man |  23 | 123   |
| 13 | peter | man |  23 | 123   |
| 14 | peter | man |  23 | 123   |
| 15 | peter | man |  23 | 123   |
+----+-------+-----+-----+-------+



【三層架構(gòu)】 (程序分成三種架構(gòu))

數(shù)據(jù)訪問(wèn)層

業(yè)務(wù)處理層

表示層,UI層

08day10  #工程(項(xiàng)目)
  - model     #(包)數(shù)據(jù)庫(kù)里有幾張表,這里就建幾個(gè)文件,并且跟數(shù)據(jù)庫(kù)的名要一一對(duì)應(yīng),也就是要對(duì)什么表操作就建什么名字的模塊文件
    - __init__.py
    - students.py   #有一個(gè)表叫students,可以調(diào)用sql_helper模塊文件對(duì)students表做增刪改查操作,公共配置配寫(xiě)在sql_helper,增刪改查寫(xiě)在students,最后由admin去做執(zhí)行
  - utility   #(包)公共層,這里寫(xiě)公共的一些功能,比如說(shuō)對(duì)數(shù)據(jù)庫(kù)的操作,又比如說(shuō)你要用網(wǎng)絡(luò)服務(wù)的時(shí)候,你需要請(qǐng)求哪個(gè)地址,那你可以再為他建一個(gè)單獨(dú)文件,統(tǒng)一操作,所有一類(lèi)的都通過(guò)我去執(zhí)行,如下
    - __init__.py
    - sql_helper.py   #數(shù)據(jù)庫(kù)的公共配置操作
  - conf.py   #(模塊)這里面放配置文件,比如:要連接的數(shù)據(jù)庫(kù)或者要連接的接口把他的URL放在這里
  - index.py  #(模塊)主文件,程序進(jìn)來(lái)首先執(zhí)行的文件,index再起觸發(fā)其他模塊的其他類(lèi),或其它類(lèi)里的方法


1)三層架構(gòu)之公共層

cat sql_helper.py
#!/usr/bin/env python
#coding:utf-8
import MySQLdb
import conf
class MySQLHelper(object):
    def __init__(self):
        self.__conn_dict = conf.conf_dict
    def Get_Dict(self,sql,params):
        conn = MySQLdb.connect(host='192.168.1.113',user='root',passwd='123456',db='wsyht')
        cur = conn.cursor()
        reCount = cur.execute(sql,params)
        data = cur.fetchall()
        cur.close()
        conn.close()
        return data    #返回值給調(diào)用方
    def Get_One(self,sql,params):
        conn = MySQLdb.connect(**self.__conn_dict)  #兩個(gè)*以字典方式傳多個(gè)值,一個(gè)*以列表方式傳值,傳多個(gè)值
        cur = conn.cursor()
        reCounts = cur.execute(sql,params)
        data = cur.fetchone()
        cur.close()
        conn.close()
        return data    #返回值給調(diào)用方
'''   #注意:調(diào)用的話不是直接寫(xiě)在這個(gè)文件調(diào)用,這不過(guò)是為了演示
helper = MySQLHelper()
sql = "select *from students where id > %s"
params = (15)
one_data = helper.Get_one(sql, params)
dict_data = helper.Get_Dict(sql, params)
print one_data
print dict_data
'''


2)三層架構(gòu)之model層

cat students.py
#!/usr/bin/env python
#coding:utf-8
from  utility.sql_helper import MySQLHelper  #把類(lèi)導(dǎo)入進(jìn)來(lái)
class Students(object):
    def __init__(self):
        self.__helper = MySQLHelper()    #面向?qū)ο褓x值給私有字段
    def Get_One(self,id):
        sql = "select *from students where id = %s"
        params = (id)
        return self.__helper.Get_One(sql,params)
    def CheckValidate(self,username,password):
        sql = "select * from students where name = %s and password = %s"
        params = (username,password)
        return self.__helper.Get_One(sql,params)
3)三層架構(gòu)之配置文件 
conf一般與utility這一層進(jìn)行相應(yīng)的設(shè)置
#!/usr/bin/env python
#coding:utf-8
#以字典方式傳值,第一排和第二排勻是用字典方式傳值,任選其一即可,以后要改IP啥的來(lái)這里改即可
conf_dict = dict(host='192.168.1.113',user='root',passwd='123456',db='wsyht')
#conf_dict = {'host':'192.168.1.113','user':'root','passwd':'123456','db':'wsyht'}


#主程序執(zhí)行文件

cat index.py
#!/usr/bin/env python
#coding:utf-8
from model.students import Students
def main():
    user = raw_input('username:')
    pwd = raw_input('password:')
    students = Students()
    result = students.CheckValidate(user,pwd)
    if not result:
        print '你輸入的用戶名或密碼有誤'
    else:
        print '歡迎登陸后臺(tái)管理頁(yè)面'
if __name__ == '__main__':
    main()



#wsyht庫(kù)下的students表

mysql> select *from students;
+----+---------+-----+-----+----------+
| id | name    | sex | age | password |
+----+---------+-----+-----+----------+
|  1 | wsyht   | man |  18 | 123456   |
|  2 | jenkins | man |  20 | 13579    |
+----+---------+-----+-----+----------+


執(zhí)行順序總結(jié):        -->1、調(diào)用配置文件

主程序(index文件)--> model層(students表文件)--> 公共層(sql_helper數(shù)據(jù)庫(kù)公共操作文件)

       -->2、調(diào)用數(shù)據(jù)庫(kù)


寫(xiě)法總結(jié): 寫(xiě)法則是按執(zhí)行順序從后往上

1、先寫(xiě)公共層

2、寫(xiě)model層

3、寫(xiě)主程序文件

4、寫(xiě)配置文件



【Socket網(wǎng)絡(luò)編程】

- main 包
   - client.py 
   - server.py 
示例1:
#!/usr/bin/env Python
#coding:utf-8
import socket
def handle_request(client):  
    buf = client.recv(1024)   #客戶端接收服務(wù)端數(shù)據(jù),緩存區(qū)1024字節(jié),最多只能拿1024字節(jié)
    client.send("HTTP/1.1 200 OK\r\n\r\n")  #服務(wù)端發(fā)送信息
    client.send("Hello,World!123")   #服務(wù)端發(fā)送信息
    print buf
def main():
    sock = socket.socket()         #建立socket對(duì)像
    sock.bind(('localhost',5821))  #監(jiān)聽(tīng)本地8080端口
    sock.listen(5)           #允許建立的最大連接數(shù)
    while True:
        connection, address = sock.accept()    #阻塞直接有客戶端請(qǐng)求,connectin就是客戶端的socket對(duì)像,address代表客戶端的地址
        handle_request(connection)
        connection.close()
    
if __name__ == '__main__':
    main()
#瀏覽器訪問(wèn)測(cè)試 http://localhost:5821


示例2:

main    #包
  - init.py
  - server.py
  - client.py
服務(wù)端腳本
cat server.py 
#!/usr/bin/env python
#coding:utf-8
import  socket
sk = socket.socket()   #調(diào)用socket的這個(gè)類(lèi)對(duì)像,創(chuàng)建對(duì)像
ip_port = ('127.0.0.1',873)
sk.bind(ip_port)       #監(jiān)聽(tīng)服務(wù)器的IP和端口
sk.listen(5)           #允許的最大接數(shù)為5
while True:            #創(chuàng)建一個(gè)死循環(huán),讓他不停的接收用戶發(fā)過(guò)來(lái)的請(qǐng)求
    conn,address = sk.accept()       #阻塞等待直到有客戶端連接,conn就是客戶端的socket對(duì)像,address代表客戶端的地址
    conn.send('Hello,Wo2ld!')               #向客戶端發(fā)送數(shù)據(jù)
    conn.close()                     #對(duì)客戶端關(guān)閉連接


客戶端腳本

cat client.py
#!/usr/bin/env python
#coding:utf-8
import socket
client = socket.socket()              #創(chuàng)建客戶端socket
ip_port = ('127.0.0.1',873)           
client.connect(ip_port)              #連接服務(wù)端
data = client.recv(1024)              #接收服務(wù)端數(shù)據(jù)
print  data


執(zhí)行腳本:先執(zhí)行服務(wù)端腳本,再執(zhí)行客戶端腳本


socket服務(wù)端執(zhí)行步驟:

1、創(chuàng)建socket對(duì)像

2、監(jiān)聽(tīng)服務(wù)器IP和端口

3、設(shè)置最大連接數(shù)

4、阻塞等待直到有客戶端連接

5、發(fā)送數(shù)據(jù)

6、關(guān)閉連接


socket客戶端執(zhí)行步驟

1、創(chuàng)建socket對(duì)像

2、與服務(wù)器端建立連接

3、請(qǐng)求數(shù)據(jù)



Socket客戶端與服務(wù)端的交互示例:

-

main 包
   - client.py 
   - server.py 
服務(wù)器端演示:
#!/usr/bin/env Python
#coding:utf-8
import socket
sk = socket.socket()
ip_port = ('127.0.0.1',995)
sk.bind(ip_port)
sk.listen(5)     #阻塞數(shù)量
while True:
    conn,address = sk.accept()
    conn.send('hello')
    print '新用戶進(jìn)入系統(tǒng)'
    print 'server:hello'
    flag = True
        while flag:
            data = conn.recv(1024)              #接收客戶端數(shù)據(jù)
            if data == 'exit':
                flag = False
                print '對(duì)方已退出系統(tǒng)'
                break
            print 'client:',data
            inp = raw_input('server:')
            conn.send(inp)
        conn.close()


客戶端演示:

#!/usr/bin/env Python
#coding:utf-8
import socket
client = socket.socket()
ip_port = ('127.0.0.1',995)
client.connect(ip_port)
while True:
    data = client.recv(1024)          #接收服務(wù)端數(shù)據(jù)
    print 'server:',data
    inp = raw_input('client:')
    client.send(inp)
    if inp == 'exit':
        break


#異步多線程服務(wù)端

cat server.py
#!/usr/bin/env Python
#coding:utf-8
import SocketServer
class MyServer(SocketServer.BaseRequestHandler):
    def setup(self):
        pass
def handle(self):
    conn = self.request
    conn.send('hello')
    print '新用戶進(jìn)入系統(tǒng)'
    print 'server:hello'
    flag = True
    while flag:
        data = conn.recv(1024)
        if data == 'exit':
            flag = False
            print '對(duì)方已退出系統(tǒng)'
            break
        print 'client:',data
        inp = raw_input('server:')
        conn.send(inp)
    conn.close()
def  finish(self):
    pass
if __name__ == '__main__':
    server = SocketServer.ThreadingTCPServer(('127.0.0.1',995),MyServer)
    server.serve_forever()


#客戶端

cat client.py
#!/usr/bin/env Python
#coding:utf-8
import socket
client = socket.socket()
ip_port = ('127.0.0.1',995)
client.connect(ip_port)
while True:
    data = client.recv(1024)
    print 'server:',data
    inp = raw_input('client:')
    client.send(inp)
    if inp == 'exit':
        break

#可以拷貝多一個(gè)client.py文件出來(lái),然后,先執(zhí)行服務(wù)端程序,再執(zhí)行兩個(gè)客戶端文件,就可以實(shí)現(xiàn)異步處理兩個(gè)對(duì)話,也就是異步多線程處理

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI