首頁 資料庫 mysql教程 sqlalchemy学习日志_MySQL

sqlalchemy学习日志_MySQL

May 16, 2018 am 10:28 AM

最近学习sqlalchemy框架,可我没能发现一篇通俗易懂的博文,毕竟本人新手小白还不能理解大神的世界,注释就草草几行全无程序员节操。经过一整天的Traceback和各种error我总算是摸索到一点门路,慌忙整理下以免明早起来又忘了。

导入

>>> from sqlalchemy import *
>>> from sqlalchemy.orm import *
登入後複製

建立数据库引擎

>>> engine = create_engine('mysql://root:4QSJQCRC@localhost/testdb',echo=True)
>>> metadata = MetaData()
登入後複製

#create_engine()里的格式为:create_engine('数据库://数据库用户名:密码@主机名/要用的数据库名',echo=True) 这里的echo我没做研究,反正让他 =True

#主机名后面也可以加端口号:@localhost:XXXX/testdb,也可省略

#网上看到的文章尽是以sqlite数据库为范例的,我都怀疑那些大拿是不是ctrl c,ctrl d的。自带的文档也讲的不清楚,这步就卡了我很久

#metadata这条我也不太懂,反正是绑定到数据库引擎,调用其中的一些命令可以对数据库作出相应操作

定义表

>>> users_table = Table('users',metadata,
... Column('id',Integer,primary_key=True),
... Column('name',String(40)),
... Column('fullname',String(40)),
... Column('password',String(40))
... )
登入後複製

#这里只是定义,而并不是真的就在数据库建立了一个表

#记住Table的格式就行,String就是sql里的varchar,网上的文章都可以直接写String而不用加字符长度,可我机子上不行,直接写String会出现如下错误:

#            sqlalchemy.exc.CompileError: (in table 'users', column 'name'): VARCHAR requires a length on dialect mysql
登入後複製

#所以我都加了个40的长度

创建表

>>> metadata.create_all(engine)
2014-07-18 23:57:28,023 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode'
2014-07-18 23:57:28,023 INFO sqlalchemy.engine.base.Engine ()
2014-07-18 23:57:28,027 INFO sqlalchemy.engine.base.Engine SELECT DATABASE()
2014-07-18 23:57:28,032 INFO sqlalchemy.engine.base.Engine ()
2014-07-18 23:57:28,034 INFO sqlalchemy.engine.base.Engine show collation where `Charset` = 'utf8' and `Collation` = 'utf8_bin'
2014-07-18 23:57:28,034 INFO sqlalchemy.engine.base.Engine ()
2014-07-18 23:57:28,041 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS CHAR(60)) AS anon_1
2014-07-18 23:57:28,042 INFO sqlalchemy.engine.base.Engine ()
2014-07-18 23:57:28,051 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS CHAR(60)) AS anon_1
2014-07-18 23:57:28,051 INFO sqlalchemy.engine.base.Engine ()
2014-07-18 23:57:28,052 INFO sqlalchemy.engine.base.Engine SELECT CAST('test collated returns' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin AS anon_1
2014-07-18 23:57:28,052 INFO sqlalchemy.engine.base.Engine ()
2014-07-18 23:57:28,054 INFO sqlalchemy.engine.base.Engine DESCRIBE `users`
2014-07-18 23:57:28,056 INFO sqlalchemy.engine.base.Engine ()
2014-07-18 23:57:28,059 INFO sqlalchemy.engine.base.Engine ROLLBACK
2014-07-18 23:57:28,061 INFO sqlalchemy.engine.base.Engine 
CREATE TABLE users (
    id INTEGER NOT NULL AUTO_INCREMENT, 
    name VARCHAR(40), 
    fullname VARCHAR(40), 
    password VARCHAR(40), 
    PRIMARY KEY (id)
)
登入後複製

2014-07-18 23:57:28,062 INFO sqlalchemy.engine.base.Engine ()
2014-07-18 23:57:28,074 INFO sqlalchemy.engine.base.Engine COMMIT

#这步才是真正在数据库中建立了表‘users’。注意:是在数据库testdb中,一开始建立引擎时就指定里数据库testdb

定义一个和表users相匹配的类

>>>class User(object):
...     def __init__(self,name,fullname,password):
...             self.name = name
...             self.fullname = fullname
...             self.password = password
...     def __repr__(self): 
...             return "
登入後複製

#__init__ 里的各项属性要和建立的表对应,User这个类就相当于表的模板,类的实例就是表中的一行了

#class User(object)中object不能少,我也不知道为什么反正在我的机子上要是括号内空的就会出错

#__repr__只是用来测试观察

映射

>>> mapper(User,users_table)
登入後複製

#这步就是把表和类联系起来,一一对应了

创建事务并绑定数据库连接

>>> Session = sessionmaker(bind=engine)
>>> session = Session()
登入後複製

#session就是一个事务,它在提交和关闭前,维护着一个数据库链接

添加类的实例到事务

>>> session.add_all([
... User('wendy','Wendy Williams','foobar'),
... User('mary','Mary Contrary','xxg527'),
... User('fred','Fred Flinstone','blah')])
登入後複製

#分别创建了三个类User的实例作为表users的行添加到事务中,此时事务还没提交,数据库中还没在表中建立这些行

提交事务

>>> session.commit()
2014-07-19 01:04:46,359 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2014-07-19 01:04:46,362 INFO sqlalchemy.engine.base.Engine INSERT INTO users (name, fullname, password) VALUES (%s, %s, %s)
2014-07-19 01:04:46,362 INFO sqlalchemy.engine.base.Engine ('wendy', 'Wendy Williams', 'foobar')
2014-07-19 01:04:46,365 INFO sqlalchemy.engine.base.Engine INSERT INTO users (name, fullname, password) VALUES (%s, %s, %s)
2014-07-19 01:04:46,366 INFO sqlalchemy.engine.base.Engine ('mary', 'Mary Contrary', 'xxg527')
2014-07-19 01:04:46,367 INFO sqlalchemy.engine.base.Engine INSERT INTO users (name, fullname, password) VALUES (%s, %s, %s)
2014-07-19 01:04:46,367 INFO sqlalchemy.engine.base.Engine ('fred', 'Fred Flinstone', 'blah')
2014-07-19 01:04:46,368 INFO sqlalchemy.engine.base.Engine COMMIT
登入後複製

#由此数据库中的users表中有了这三行

查询

>>> our_user = session.query(User).filter_by(name='mary').first()
2014-07-19 01:08:38,624 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2014-07-19 01:08:38,626 INFO sqlalchemy.engine.base.Engine SELECT users.id AS users_id, users.name AS users_name, users.fullname AS users_fullname, users.password AS users_password
FROM users 
WHERE users.name = %s 
 LIMIT %s
2014-07-19 01:08:38,627 INFO sqlalchemy.engine.base.Engine ('mary', 1)
>>> our_user
登入後複製

这些就是基础内容里吧,然后再往下看就so easy了。ok,睡觉

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1246
24
mysql:簡單的概念,用於輕鬆學習 mysql:簡單的概念,用於輕鬆學習 Apr 10, 2025 am 09:29 AM

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

MySQL的角色:Web應用程序中的數據庫 MySQL的角色:Web應用程序中的數據庫 Apr 17, 2025 am 12:23 AM

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

說明InnoDB重做日誌和撤消日誌的作用。 說明InnoDB重做日誌和撤消日誌的作用。 Apr 15, 2025 am 12:16 AM

InnoDB使用redologs和undologs確保數據一致性和可靠性。 1.redologs記錄數據頁修改,確保崩潰恢復和事務持久性。 2.undologs記錄數據原始值,支持事務回滾和MVCC。

MySQL:世界上最受歡迎的數據庫的簡介 MySQL:世界上最受歡迎的數據庫的簡介 Apr 12, 2025 am 12:18 AM

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

MySQL的位置:數據庫和編程 MySQL的位置:數據庫和編程 Apr 13, 2025 am 12:18 AM

MySQL在數據庫和編程中的地位非常重要,它是一個開源的關係型數據庫管理系統,廣泛應用於各種應用場景。 1)MySQL提供高效的數據存儲、組織和檢索功能,支持Web、移動和企業級系統。 2)它使用客戶端-服務器架構,支持多種存儲引擎和索引優化。 3)基本用法包括創建表和插入數據,高級用法涉及多表JOIN和復雜查詢。 4)常見問題如SQL語法錯誤和性能問題可以通過EXPLAIN命令和慢查詢日誌調試。 5)性能優化方法包括合理使用索引、優化查詢和使用緩存,最佳實踐包括使用事務和PreparedStatemen

為什麼要使用mysql?利益和優勢 為什麼要使用mysql?利益和優勢 Apr 12, 2025 am 12:17 AM

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

MySQL與其他編程語言:一種比較 MySQL與其他編程語言:一種比較 Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

MySQL索引基數如何影響查詢性能? MySQL索引基數如何影響查詢性能? Apr 14, 2025 am 12:18 AM

MySQL索引基数对查询性能有显著影响:1.高基数索引能更有效地缩小数据范围,提高查询效率;2.低基数索引可能导致全表扫描,降低查询性能;3.在联合索引中,应将高基数列放在前面以优化查询。

See all articles