摘要:是編程語言下的一款框架,該框架建立在數(shù)據(jù)庫之上,使用關(guān)系對象映射進行數(shù)據(jù)庫操作,簡言之便是將對象轉(zhuǎn)換成,然后使用數(shù)據(jù)執(zhí)行并獲取執(zhí)行結(jié)果。正確使用的前提是了解關(guān)系數(shù)據(jù)庫的原理。就是把數(shù)據(jù)庫表的行與相應(yīng)的對象建立關(guān)聯(lián),互相轉(zhuǎn)換。
sqlalchemy是Python編程語言下的一款ORM框架,該框架建立在數(shù)據(jù)庫API之上,使用關(guān)系對象映射進行數(shù)據(jù)庫操作,簡言之便是:將對象轉(zhuǎn)換成SQL,然后使用數(shù)據(jù)API執(zhí)行SQL并獲取執(zhí)行結(jié)果。
SQLAlchemy本身無法操作數(shù)據(jù)庫,其必須以pymsql等第三方插件,Dialect用于和數(shù)據(jù)API進行交流,根據(jù)配置文件的不同調(diào)用不同的數(shù)據(jù)庫API,從而實現(xiàn)對數(shù)據(jù)庫的操作。
MySQL-Python mysql+mysqldb://: @ [: ]/ pymysql mysql+pymysql:// : @ / [? ] MySQL-Connector mysql+mysqlconnector:// : @ [: ]/ cx_Oracle oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]
使用 Engine/ConnectionPooling/Dialect 進行數(shù)據(jù)庫操作,Engine使用ConnectionPooling連接數(shù)據(jù)庫,然后再通過Dialect執(zhí)行SQL語句。
#!/usr/bin/env python # -*- coding:utf-8 -*- from sqlalchemy import create_engine engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/t1", max_overflow=5) # 執(zhí)行SQL # cur = engine.execute( # "INSERT INTO hosts (host, color_id) VALUES ("1.1.1.22", 3)" # ) # 新插入行自增ID # cur.lastrowid # 執(zhí)行SQL # cur = engine.execute( # "INSERT INTO hosts (host, color_id) VALUES(%s, %s)",[("1.1.1.22", 3),("1.1.1.221", 3),] # ) # 執(zhí)行SQL # cur = engine.execute( # "INSERT INTO hosts (host, color_id) VALUES (%(host)s, %(color_id)s)", # host="1.1.1.99", color_id=3 # ) # 執(zhí)行SQL # cur = engine.execute("select * from hosts") # 獲取第一行數(shù)據(jù) # cur.fetchone() # 獲取第n行數(shù)據(jù) # cur.fetchmany(3) # 獲取所有數(shù)據(jù) # cur.fetchall()
ORM框架的作用就是把數(shù)據(jù)庫表的一行記錄與一個對象互相做自動轉(zhuǎn)換。 正確使用ORM的前提是了解關(guān)系數(shù)據(jù)庫的原理。 ORM就是把數(shù)據(jù)庫表的行與相應(yīng)的對象建立關(guān)聯(lián),互相轉(zhuǎn)換。 由于關(guān)系數(shù)據(jù)庫的多個表還可以用外鍵實現(xiàn)一對多、多對多等關(guān)聯(lián),相應(yīng)地, ORM框架也可以提供兩個對象之間的一對多、多對多等功能。
1.創(chuàng)建表create_engine方法參數(shù)("使用數(shù)據(jù)庫+數(shù)據(jù)庫鏈接模塊://數(shù)據(jù)庫用戶名:密碼@ip地址:端口/要連接的數(shù)據(jù)庫名稱?charset=utf8",echo=True表示是否查看生成的sql語句,max_overflow=5) max_overflow=5 表示最大連接數(shù) declarative_base()創(chuàng)建一個SQLORM基類 Column()設(shè)置字段屬性 create_all()向數(shù)據(jù)庫創(chuàng)建指定表 創(chuàng)建表數(shù)據(jù)類型 整數(shù)型:TINYINT,SMALLINT,INT,BIGINT Boolean()對應(yīng)TINYINT Integer()對應(yīng)INT SMALLINT()對應(yīng)SMALLINT BIGINT()對應(yīng)BIGINT 浮點型:FLOAT,DOUBLE,DECIMAL(M,D) DECIMAL()對應(yīng)DECIMAL Float()對應(yīng)FLOAT REAL()對應(yīng)DOUBLE 字符型:CHAR,VARCHAR String(40)對應(yīng)VARCHAR CHAR()對應(yīng)CHAR 日期型:DATETIME,DATE,TIMESTAMP DATETIME()對應(yīng)DATETIME DATE()對應(yīng)DATE TIMESTAMP()對應(yīng)TIMESTAMP 備注型:TINYTEXT,TEXT, Text()對應(yīng)TEXT UnicodeText(10)對應(yīng)TINYTEXT ############################################################################## # -*- coding:utf-8 -*- import sqlalchemy from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index from sqlalchemy.orm import sessionmaker, relationship from sqlalchemy import create_engine engine = create_engine("mysql+mysqlconnector://root:123456@127.0.0.1:3306/project_db", echo=True) Base = declarative_base() class People(Base): __tablename__ = "people" # 表名 id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String(16), nullable=False) age = Column(Integer, nullable=False) job = Column(String(16), nullable=False) salary = Column(Integer, nullable=False) Base.metadata.create_all(engine) # 新建表 # Base.metadata.drop_all(engine) # 刪除表
primary_key=True主鍵索引
autoincrement=True自增字段
index=True給當(dāng)前字段創(chuàng)建普通索引
unique=True給當(dāng)前字段創(chuàng)建唯一索引
UniqueConstraint("字段","字段",name="索引名稱")創(chuàng)建唯一組合索引
Index("索引名稱","字段","字段")創(chuàng)建普通組合索引
default="abc"設(shè)置字段默認(rèn)值,不怎么可靠
ForeignKey("連接表名稱.連接表主鍵字段")設(shè)置外鍵鏈表
nullable=False類容不能為空
# -*- coding:utf-8 -*- import sqlalchemy from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index from sqlalchemy.orm import sessionmaker, relationship from sqlalchemy import create_engine engine = create_engine("mysql+mysqlconnector://root:123456@127.0.0.1:3306/project_db", echo=True) Base = declarative_base() class People(Base): __tablename__ = "people" id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String(16), nullable=False) age = Column(Integer, nullable=False) job = Column(String(16), nullable=False) salary = Column(Integer, nullable=False) books = relationship("book") # 這里的book為小寫 class Book(Base): __tablename__ = "book" id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String(16), nullable=False) author = Column(String(16), nullable=False) people_id = Column(Integer, ForeignKey("people.id")) # 這里的people為小寫 Base.metadata.create_all(engine) # 新建表 #Base.metadata.drop_all(engine) # 刪除表創(chuàng)建多對多
class Server(Base): __tablename__ = "server" id = Column(Integer, primary_key=True, autoincrement=True) hostname = Column(String(8)) class Group(Base): __tablename__ = "group" id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String(16), unique=True) class ServertoGroup(Base): __tablename__ = "servertogroup" id = Column(Integer, primary_key=True, autoincrement=True) server_id = Column(Integer, ForeignKey("server.id")) group_id = Column(Integer, ForeignKey("group.id"))
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/41254.html
摘要:百度云搜索,搜各種資料搜網(wǎng)盤,搜各種資料注意數(shù)據(jù)保存的操作都是在文件里操作的將數(shù)據(jù)保存為文件是一個信號檢測導(dǎo)入圖片下載器模塊定義數(shù)據(jù)處理類,必須繼承初始化時打開文件為數(shù)據(jù)處理函數(shù),接收一個,里就是爬蟲最后來的數(shù)據(jù)對象文章標(biāo)題是 【百度云搜索,搜各種資料:http://www.bdyss.cn】 【搜網(wǎng)盤,搜各種資料:http://www.swpan.cn】 注意:數(shù)據(jù)保存的操作都是在p...
摘要:簡介爬蟲這個東西我就不多做介紹了,總之是一個很好用的爬蟲庫,且關(guān)于也有較多的教程。這篇文章記錄一下我個人的項目規(guī)劃和天坑心得。然后執(zhí)行就會自動去爬數(shù)據(jù)了。常用配置這里要結(jié)合一些原因來進行說明。 簡介 scrapy爬蟲這個東西我就不多做介紹了,總之是一個很好用的Python爬蟲庫,且關(guān)于scrapy也有較多的教程。這篇文章記錄一下我個人的項目規(guī)劃和天坑心得。 通常來說,我們執(zhí)行了scra...
摘要:前言本文記錄自己在學(xué)習(xí)當(dāng)中遇到的各種大小問題,持續(xù)更新。錯誤分析本身是一個網(wǎng)絡(luò)引擎框架,的運行依賴于。在打開新建的項目后,報錯顯示。錯誤分析的默認(rèn)依賴項當(dāng)中沒有,或者說默認(rèn)查找的路徑中找不到。 前言 本文記錄自己在學(xué)習(xí)scrapy當(dāng)中遇到的各種大小問題,持續(xù)更新。 環(huán)境簡介: 語言版本 爬蟲框架 IDE 系統(tǒng) python3.5 scrapy1.4.0 pycharm win1...
摘要:圖片下載和拿到下載后的路徑小封面圖的爬取,后面通過傳到中詳情頁的爬取詳情頁的完整地址下一頁的爬取與請求不明打開功能注意如要進一步定制功能補充新建 圖片下載和拿到下載后的路徑 1 items.py import scrapy class InfoItem(scrapy.Item): url = scrapy.Field() url_object_id = scrapy....
摘要:的安裝環(huán)境是后面創(chuàng)建用來運行的名網(wǎng)站域名在創(chuàng)建可以通過此文件運行本文件名父文件名路徑和父文件名設(shè)置環(huán)境,必須以上運行可能在下會報錯準(zhǔn)備工作完在下獲取列表頁每一個的把獲取到的交給 scrapy的安裝 環(huán)境:python3.6 1 pip install -i https://pypi.douban.com/simple/ scrapy 2 scrapy startpr...
閱讀 1854·2021-11-25 09:43
閱讀 1494·2021-09-02 15:21
閱讀 3459·2019-08-30 15:52
閱讀 1506·2019-08-30 12:48
閱讀 1300·2019-08-30 10:57
閱讀 2933·2019-08-26 17:41
閱讀 683·2019-08-26 11:59
閱讀 1372·2019-08-26 10:41