91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python 操作 MySQL數據庫

發布時間:2020-06-21 11:33:10 來源:網絡 閱讀:2106 作者:skypeGNU1 欄目:數據庫

一、安裝 MySQL

    可以直接從MySQL官方網站下載最新版本。MySQL是跨平臺的,選擇對應的平臺下載安裝文件,安裝即可。 如果是Windows用戶,那么安裝過程非常簡單,直接根據向導一步一步操作即可。 如果是 Linux 用戶,安裝過程也是相當簡單的。

## Ubuntu / Debian
$ sudo apt-get install mysql-server
$ sudo apt-get install mysql-client

## CentOS / RHEL
# yum install -y mysql mysql-server mysql-devel

基礎設置:

## 啟動 mysql
# service mysqld start

## 初始化
# /usr/bin/mysql_secure_installation

## 編輯 my.cnf ,修改默認編碼設置
# vi /etc/my.cnf
[client]
default-character-set = utf8

[mysqld]
default-storage-engine = INNODB
character-set-server = utf8
collation-server = utf8_general_ci

## 驗證
# service mysqld restart
# mysql -u root -p

mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

二、安裝 MySQL 驅動

由于MySQL服務器以獨立的進程運行,并通過網絡對外服務,所以,需要支持Python的MySQL驅動來連接到MySQL服務器。

目前,有兩個MySQL驅動:

  • mysql-connector-python:是MySQL官方的純Python驅動;

  • MySQL-python:是封裝了MySQL C驅動的Python驅動。

MySQL-python

    MySQL-3.23 through 5.5 and Python-2.4 through 2.7 are currently supported. Python-3.0 will be supported in a future release. 

方式一:(推薦)

# pip install MySQL-python

方式二:(推薦)

## Ubuntu
$ sudo apt-get install python-mysqldb

## CentOS
# yum install -y MySQL-python

方式三: 

下載地址: https://pypi.python.org/pypi/MySQL-python/

下載完成MySQL-python-1.2.5.zip 文件之后直接解壓。進入MySQL-python-1.2.5目錄

# unzip MySQL-python-1.2.5.zip
# cd MySQL-python-1.2.5
# python setup.py install


測試是否安裝成功

測試非常簡單,檢查 MySQLdb 模塊是否可以正常導入即可。

[root@localhost ~]# python
Python 2.6.6 (r266:84292, Jul 23 2015, 15:22:56) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb

沒有報錯提示MySQLdb模塊找不到,說明安裝OK 。

三、數據庫基本操作回顧

mysql> show databases;                 // 查看當前所有的數據庫
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
+--------------------+
2 rows in set (0.15 sec)

mysql> CREATE DATABASE test;            // 創建數據庫
Query OK, 1 row affected (0.17 sec)

mysql> use test;    
Database changed
mysql> show tables;                     // 查看數據庫表
Empty set (0.00 sec)

// 創建名為 user 的表
mysql> CREATE TABLE user 
(
    id INT UNSIGNED AUTO_INCREMENT, 
    name VARCHAR(20), 
    password VARCHAR(20), 
    PRIMARY KEY(id)
) engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.16 sec)

// 向表中插入幾條數據
mysql> INSERT INTO user(name, password) VALUES('Tom', '1321'),('Alen', '7875'),('Jack', '6759');
Query OK, 3 rows affected (0.07 sec)
Records: 3  Duplicates: 0  Warnings: 0

// 查看 user 表數據
mysql> SELECT * FROM user;
+----+------+----------+
| id | name | password |
+----+------+----------+
|  1 | Tom  | 1321     |
|  2 | Alen | 7875     |
|  3 | Jack | 6759     |
+----+------+----------+
3 rows in set (0.13 sec)

四、Python 操作數據庫

先來個簡單的示例程序:

# -*- coding: utf-8 -*- 

import MySQLdb
 
try:
    conn = MySQLdb.connect(
        host = 'localhost',
        user = 'root',
        passwd = '123456',
        db = 'test',
        port = 3306
        )
    cur = conn.cursor()
    
    # 執行SQL
    cur.execute (""" 
    CREATE TABLE python 
    ( 
        ID INT, 
        COL1 VARCHAR(40), 
        COL2 VARCHAR(40), 
        COL3 VARCHAR(40) 
    ) 
    """)  
  
    cur.execute (""" 
    INSERT INTO TEST (ID, COL1, COL2, COL3) 
    VALUES 
        (1, 'a', 'b', 'c'), 
        (2, 'aa', 'bb', 'cc'), 
        (3, 'aaa', 'bbb', 'ccc') 
    """)  
    
    cur.execute('select * from python')
    
    cur.close()
    conn.commit()
    conn.close()
except MySQLdb.Error,e:
     print "Mysql Error %d: %s" % (e.args[0], e.args[1])

請注意修改你的數據庫,主機名,用戶名,密碼。 連接數據庫時要注意數據庫編碼,不然一堆編碼問題很愁人的~最好統一使用utf8編碼。為了避免亂碼,可修改一個參數:

conn = MySQLdb.Connect(host='localhost', user='root', passwd='123456', db='test') 中加一個屬性:
 改為:
conn = MySQLdb.Connect(host='localhost', user='root', passwd='123456', db='test', charset='utf8'
charset是要跟你數據庫的編碼一樣,如果是數據庫是gb2312 ,則寫charset='gb2312'。


1、增

# -*- coding: utf-8 -*-

import MySQLdb

conn = MySQLdb.connect(
	host = 'localhost',
	port = 3306,
	user = 'root',
	passwd = '123456',
	db = 'test',
	charset = 'utf8'
)

cur = conn.cursor()

cur.execute("INSERT INTO user(name, password) VALUES('python', '8901')")

cur.close()
conn.commit()
conn.close()

通過上面execute()方法中寫入純的sql語句來插入數據并不方便。如:

>>> cur.execute("insert into user(name, password)  values('python', '8901')")

我要想插入新的數據,必須要對這條語句中的值做修改。我們可以做如下修改:

# -*- coding: utf-8 -*-

import MySQLdb

conn = MySQLdb.connect(
	host = 'localhost',
	port = 3306,
	user = 'root',
	passwd = '123456',
	db = 'test',
	charset = 'utf8'
)

cur = conn.cursor()

sqli = "INSERT INTO user(name, password) VALUES(%s, %s)"
cur.execute(sqli, ('chrome', '1903'))

cur.close()
conn.commit()
conn.close()

executemany()方法可以一次插入多條記錄

sqli = "INSERT INTO user(name, password) VALUES(%s, %s)"
cur.executemany(sqli, [
        ('IE', '1021'),
        ('Firefox', '9012'),
        ('windows', '6213')
    ]
)

最佳實踐:

    如果是插入數據,要執行commit操作,不然數據不會被寫入數據庫。最好是執行完所有的sql語句之后再commit,實踐證明,這樣會帶來很大的速度提升。

    cur.execute(sqli, (value1, value2))  , 如果value的值存在不確定性,那么上面兩條語句存在sql注入風險。

    例如,如果value是一段html代碼,html代碼中如果存在引號(單引號或者雙引號),如果不加處理,那么sql語句就將被截斷,將會引發插入錯誤。

    如果value中存在英文逗號,將會造成前面的key和后面的value不對應,也不能正確插入數據。

    如果value中存在反斜線 \,那么在python中反斜線后面的數據將被轉義,如果不處理插入的話將會造成字符丟失或者其他不可遇見的結果。

    因為在 SQL 中和在 Python 中有好多含有特殊含義的符號,如果不能很好的處理的話將會出現好多問題,幸好MYSQLdb模塊給我們提供了一個escape_string方法,用這個方法能自動處理好上面的問題,特別方便。

value = MySQLdb.escape_string(value)     # 該函數阻止 python字符串以及SQL轉義


2、查

也許你已經嘗試了在python中通過

>>>cur.execute("select  *  from  user")

來查詢數據表中的數據,但它并沒有把表中的數據打印出來。

來看看這條語句獲得的是什么

>>>aa=cur.execute("select * from user")

>>>print aa

5

它獲得的只是我們的表中有多少條數據。那怎樣才能獲得表中的數據呢?

# -*- coding: utf-8 -*-

import MySQLdb

conn = MySQLdb.connect(
	host = 'localhost',
	port = 3306,
	user = 'root',
	passwd = '123456',
	db = 'test',
	charset = 'utf8'
)

cur = conn.cursor()

# 獲取表中共有多少條記錄
sqls = "SELECT * FROM user"
num = cur.execute(sqls)
print num

# 打印
info = cur.fetchmany(num)
for line in info:
	print line

cur.close()
conn.commit()
conn.close()

查詢通常有兩種方式:

一種是使用cursor.fetchall()獲取所有查詢結果,然后再一行一行的迭代;

另一種每次通過cursor.fetchone()獲取一條記錄,直到獲取的結果為空為止。看一下下面的例子:

import MySQLdb
 
try:
    conn = MySQLdb.connect(host='localhost',user='root',passwd='123456',port=3306)
    cur = conn.cursor()
     
    conn.select_db('test')
 
    sqls = "SELECT id, name, password FROM user"
    cur.execute(sqls)
    rows = cur.fetchall()
    for row in rows:
	print '%s, %s, %s' % (row[0], row[1], row[2])
	
    print 'Number of rows returned: %s' % (cur.rowcount)
    
    ##############
    
    sqls = "SELECT id, name, password FROM user"
    cur.execute(sqls)
    while True:
        row = cur.fetchone()
        if row == None:
                break
        print '%s, %s, %s' % (row[0], row[1], row[2])

    print 'Number of rows returned: %s' % (cur.rowcount)
    
    #############
    
    cur.scroll(0,mode = 'absolute')    # 移動游標
    results = cur.fetchmany(5)
    for r in results:
        print r     
 
    conn.commit()
    cur.close()
    conn.close()
 
except MySQLdb.Error,e:
     print "Mysql Error %d: %s" % (e.args[0], e.args[1])


下面貼一下常用的函數:

conn連接對象也提供了對事務操作的支持,標準的方法
commit() 提交
rollback() 回滾

cursor用來執行命令的方法:
callproc(self, procname, args):用來執行存儲過程,接收的參數為存儲過程名和參數列表,返回值為受影響的行數
execute(self, query, args):執行單條sql語句,接收的參數為sql語句本身和使用的參數列表,返回值為受影響的行數
executemany(self, query, args):執行單挑sql語句,但是重復執行參數列表里的參數,返回值為受影響的行數
nextset(self):移動到下一個結果集

cursor用來接收返回值的方法:
fetchall(self):接收全部的返回結果行.
fetchmany(self, size=None):接收size條返回結果行.如果size的值大于返回的結果行的數量,則會返回cursor.arraysize條數據.
fetchone(self):返回一條結果行.
scroll(self, value, mode='relative'):移動指針到某一行.如果mode='relative',則表示從當前所在行移動value條,如果 mode='absolute',則表示從結果集的第一行移動value條.


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

资阳市| 仙桃市| 芦山县| 白河县| 贡觉县| 岑巩县| 明溪县| 龙游县| 育儿| 分宜县| 福海县| 贺州市| 锦州市| 苍山县| 宝兴县| 庆阳市| 如皋市| 天长市| 屏南县| 民县| 阜南县| 平湖市| 吉安县| 连云港市| 包头市| 鸡西市| 方山县| 丹凤县| 宜宾市| 祁东县| 全椒县| 宣武区| 越西县| 江源县| 沙坪坝区| 平潭县| 体育| 扶沟县| 阿克陶县| 连山| 新兴县|