MySQL

簡(jiǎn)介
  • MySQL 是開(kāi)源的,分商業(yè)版和社區(qū)版。
  • 關(guān)系型數(shù)據(jù)庫(kù)的一種,還有 SQLServer,SQLite,PostgreSQL,MariaDB,ORACLE...
  • Linux作為操作系統(tǒng),ApacheNginx作為 Web 服務(wù)器,MySQL 作為數(shù)據(jù)庫(kù),PHP/Perl/Python作為服務(wù)器端腳本解釋器,這就是“LAMP“或“LNMP”組合。
安裝
windows:

下載軟件包,下一步。。。完成。

安裝可視化工具 MF (MySQL-Front)
linux:
  • apt-get install mysql-server mysql-client
    提示設(shè)置"root"密碼...
    完成
    命令行輸入: mysql -uroot -p
    然后輸入:剛才設(shè)置的密碼
    就可以用SQL語(yǔ)句操作數(shù)據(jù)庫(kù)了。
    比如 : show databases
  • 修改配置文件:
    cd /etc/mysql/
    cd mysql.conf.d/
    vi mysqld.cnf
    ...
    service mysql restart
使用
  • "--空格":代表注釋。
  • ";": 分號(hào)代表一條語(yǔ)句的結(jié)束。
  • 數(shù)據(jù)庫(kù)名, 表名,字段名,都有 反引號(hào) ``.







示例:通過(guò)MySQL-Front寫(xiě)的SQL語(yǔ)句
通過(guò) MySQLdb 操作數(shù)據(jù)庫(kù)

MySQLdb是一款較為底層的,python連接mysql用的模塊。和更加高級(jí)的,提供ORM的模塊不同,MySQLdb主要還是聚焦于如何和數(shù)據(jù)庫(kù)進(jìn)行連接和進(jìn)行基本的操作,操作的體現(xiàn)形式主要還是進(jìn)行SQL語(yǔ)句的執(zhí)行

這里還可以選擇其他的驅(qū)動(dòng)比如: cymysql
安裝:pipenv install cymysql
使用:
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+cymysql://root:123456@localhost/test"

  • 建立連接
  • 游標(biāo)對(duì)象執(zhí)行SQL語(yǔ)句,游標(biāo)對(duì)象返回?cái)?shù)據(jù)。
    fetchone() , fetchall()返回的都是元組。
  • 關(guān)閉連接

db.close()

  • 例子:
查詢(xún)數(shù)據(jù)庫(kù)


封裝 fetchone() fetchall() 返回的結(jié)果
直接返回的是不帶 表字段 的元組,可讀性差。

增刪改查
都是通過(guò)cursor.execute(sql [,args])
然后再 con.commit() 提交.
con.rollback() 回滾 cursor 的所有操作。

通過(guò) SQLAlchemy 操作數(shù)據(jù)庫(kù)

http://docs.sqlalchemy.org/en/latest/orm/tutorial.html

安裝
  • pipenv install SQLAlchemy
    檢測(cè)是否安裝成功
數(shù)據(jù)類(lèi)型

Integer Float Boolean ForeignKey Date/DateTime String...

建表

注意:

  • 數(shù)據(jù)庫(kù) test 要提前建好。
  • 設(shè)置編碼 utf8
    engine = create_engine('mysql://root:123456@localhost/test?charset=utf8')
添加數(shù)據(jù),并提交到數(shù)據(jù)庫(kù)。
from sqlalchemy.orm import sessionmaker

.add_all ( [a, b] )

刪除數(shù)據(jù)
修改數(shù)據(jù)

可以多次 .add()

查找數(shù)據(jù)
  • session.query(News).get(3)
    get(),表示用主鍵查詢(xún)
    從News表中,查詢(xún) id 是“3” 的數(shù)據(jù)
  • session.query(News).filter_by(author="Lee")
    從News表中,查詢(xún) 字段 是 "Lee" 的數(shù)據(jù)
  • session.query(News).filter(News.author != "Lee")
    從News表中,查詢(xún) 表名.字段 不是 "Lee" 的數(shù)據(jù)
  • session.query(News.author.in_(["Lee", "Taylor"])
    查詢(xún) 作者 Lee ,Taylor 的數(shù)據(jù)
  • session.query(~News.author.in_(["Lee", "Taylor"])
    查詢(xún) 作者 不是 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('%張三%')
    查詢(xún) 作者名,包含 "張三" 的數(shù)據(jù).
    % 代表 0個(gè)或多個(gè)任意字符。
  • query().filter(News.author.like('_a_lor')
    _ 代表 一個(gè)任意字符。
  • .first() 和 .all()
  • .one() 只查找一條數(shù)據(jù)
    該方法在找到多條數(shù)據(jù),或者 找不到數(shù)據(jù),都會(huì)報(bào)錯(cuò).
  • .one_or_none() 找不到數(shù)據(jù)時(shí),返回None,找到多條也報(bào)錯(cuò)。
注意:query() 可以傳 表 或 表字段
排序
  • .order_by(News.id.desc())
    desc()降序
    asc()升序
限制數(shù)量 和 計(jì)數(shù) 和 偏移
  • .limit()
    數(shù)量可以大于 實(shí)際返回的結(jié)果數(shù),不報(bào)錯(cuò)。
  • .count()
  • .offset()
    偏移從0開(kāi)始算.

通過(guò) session.execute() 執(zhí)行原生sql語(yǔ)句

r = session.execute("SELECT title, author, content FROM news where author='湯姆' ")
for i in r:
    print(i.title, i.content)
通過(guò) Flask-SQLAlchemy 操作數(shù)據(jù)庫(kù)

http://www.pythondoc.com/flask-sqlalchemy/index.html

  • 安裝
    pipenv install flask-sqlalchemy
  • 連接數(shù)據(jù)庫(kù),建表,添加數(shù)據(jù)。


  • 提示:
    這里可以直接 from sqlalchemy import Column 和 數(shù)據(jù)類(lèi)型。
    避免寫(xiě)成 db.Column 或 db.Integer...
  • 增刪改查
    格式 "表名.query.filter() / filter_by() / get()..."
    同上面的 通過(guò) SQLAlchemy 操作數(shù)據(jù)庫(kù)
  • get_or_404()
    first_or_404()
    在查找不到結(jié)果時(shí),返回一個(gè)404錯(cuò)誤,代替原來(lái)的get()和first()返回的None。注意,這里拋出了錯(cuò)誤,后續(xù)代碼不執(zhí)行。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容