簡介
- MySQL 是開源的开财,分商業(yè)版和社區(qū)版揪阿。
- 關系型數(shù)據(jù)庫的一種,還有 SQLServer,SQLite,PostgreSQL,MariaDB,ORACLE...
- Linux作為操作系統(tǒng)躯泰,Apache 或Nginx作為 Web 服務器厨剪,MySQL 作為數(shù)據(jù)庫,PHP/Perl/Python作為服務器端腳本解釋器难裆,這就是“LAMP“或“LNMP”組合子檀。
安裝
windows:
下載軟件包,下一步乃戈。褂痰。。完成症虑。
安裝可視化工具 MF (MySQL-Front)
linux:
- apt-get install mysql-server mysql-client
提示設置"root"密碼...
完成
命令行輸入: mysql -uroot -p
然后輸入:剛才設置的密碼
就可以用SQL語句操作數(shù)據(jù)庫了缩歪。
比如 : show databases - 修改配置文件:
cd /etc/mysql/
cd mysql.conf.d/
vi mysqld.cnf
...
service mysql restart
使用
- "--空格":代表注釋。
- ";": 分號代表一條語句的結(jié)束谍憔。
- 數(shù)據(jù)庫名匪蝙, 表名主籍,字段名,都有 反引號 ``.
示例:通過MySQL-Front寫的SQL語句
通過 MySQLdb 操作數(shù)據(jù)庫
MySQLdb是一款較為底層的逛球,python連接mysql用的模塊千元。和更加高級的,提供ORM的模塊不同颤绕,MySQLdb主要還是聚焦于如何和數(shù)據(jù)庫進行連接和進行基本的操作幸海,操作的體現(xiàn)形式主要還是進行SQL語句的執(zhí)行。
- 安裝 pipenv install mysqlclient
windows下失敗
去 https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient (cp后面的數(shù)字奥务,代表python版本)下載相應版本的whl文件 如下圖
- pipenv install path/to/xx.whl
驗證 :import MySQLdb這里還可以選擇其他的驅(qū)動比如: cymysql
安裝:pipenv install cymysql
使用:
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+cymysql://root:123456@localhost/test"
- 建立連接
- 游標對象執(zhí)行SQL語句物独,游標對象返回數(shù)據(jù)。
fetchone() , fetchall()返回的都是元組氯葬。
- 關閉連接
db.close()
- 例子:
查詢數(shù)據(jù)庫
封裝 fetchone() fetchall() 返回的結(jié)果
直接返回的是不帶 表字段 的元組挡篓,可讀性差。
增刪改查
都是通過cursor.execute(sql [,args])
然后再 con.commit() 提交.
con.rollback() 回滾 cursor 的所有操作帚称。
通過 SQLAlchemy 操作數(shù)據(jù)庫
http://docs.sqlalchemy.org/en/latest/orm/tutorial.html
安裝
-
pipenv install SQLAlchemy
檢測是否安裝成功
數(shù)據(jù)類型
Integer Float Boolean ForeignKey Date/DateTime String...
建表
注意:
- 數(shù)據(jù)庫 test 要提前建好瞻凤。
- 設置編碼 utf8
engine = create_engine('mysql://root:123456@localhost/test?charset=utf8')
添加數(shù)據(jù),并提交到數(shù)據(jù)庫世杀。
from sqlalchemy.orm import sessionmaker
.add_all ( [a, b] )
刪除數(shù)據(jù)
修改數(shù)據(jù)
可以多次 .add()
查找數(shù)據(jù)
- session.query(News).get(3)
get(),表示用主鍵查詢
從News表中,查詢 id 是“3” 的數(shù)據(jù)
- session.query(News).filter_by(author="Lee")
從News表中肝集,查詢 字段 是 "Lee" 的數(shù)據(jù)
- session.query(News).filter(News.author != "Lee")
從News表中瞻坝,查詢 表名.字段 不是 "Lee" 的數(shù)據(jù)
- session.query(News.author.in_(["Lee", "Taylor"])
查詢 作者 是 Lee ,Taylor 的數(shù)據(jù)- session.query(~News.author.in_(["Lee", "Taylor"])
查詢 作者 不是 Lee 杏瞻, Taylor 的數(shù)據(jù)
- 邏輯 與 或
from sqlalchemy import and_, or_
session.query(News).filter(and_(條件1所刀,條件2...))
session.query(News).filter(or_(條件1,條件2...))
模糊匹配 like
- session.query(News).filter(News.author.like('%張三%')
查詢 作者名捞挥,包含 "張三" 的數(shù)據(jù).
% 代表 0個或多個任意字符浮创。- query().filter(News.author.like('_a_lor')
_ 代表 一個任意字符。
- .first() 和 .all()
- .one() 只查找一條數(shù)據(jù)
該方法在找到多條數(shù)據(jù)砌函,或者 找不到數(shù)據(jù)斩披,都會報錯.- .one_or_none() 找不到數(shù)據(jù)時,返回None讹俊,找到多條也報錯垦沉。
注意:query() 可以傳 表 或 表字段
排序
- .order_by(News.id.desc())
desc()降序
asc()升序
限制數(shù)量 和 計數(shù) 和 偏移
- .limit()
數(shù)量可以大于 實際返回的結(jié)果數(shù),不報錯仍劈。- .count()
- .offset()
偏移從0開始算.
通過 session.execute() 執(zhí)行原生sql語句
r = session.execute("SELECT title, author, content FROM news where author='湯姆' ")
for i in r:
print(i.title, i.content)
通過 Flask-SQLAlchemy 操作數(shù)據(jù)庫
http://www.pythondoc.com/flask-sqlalchemy/index.html
- 安裝
pipenv install flask-sqlalchemy連接數(shù)據(jù)庫厕倍,建表,添加數(shù)據(jù)贩疙。
- 提示:
這里可以直接 from sqlalchemy import Column 和 數(shù)據(jù)類型讹弯。
避免寫成 db.Column 或 db.Integer...
- 增刪改查
格式 "表名.query.filter() / filter_by() / get()..."
同上面的 通過 SQLAlchemy 操作數(shù)據(jù)庫
- get_or_404()
first_or_404()
在查找不到結(jié)果時况既,返回一個404錯誤,代替原來的get()和first()返回的None组民。注意棒仍,這里拋出了錯誤,后續(xù)代碼不執(zhí)行邪乍。