通過MySQL驅動連接MySQL資料庫
來自專欄 Python 數據分析與數據挖掘
通過MySQL驅動連接MySQL資料庫
- MySQL官方提供了mysql-connector-python驅動
pip install mysql-connector
操作資料庫
import mysql.connector
conn =mysql.connector.connect(host= , port= , user= , password=, db=database_name, charset=utf8mb4)
cursor = conn.cursor() ##cursor.execute(create table user_test(id varchar(20) primary key,name varchar(20))) #創建表 user_testsql = insert into user_test(id,name) values (%s,%s),[1,mike]cursor.execute(sql) #通過execute() 來執行sql cursor.rowcount #表示由一種execute()方法生成的最後結果中的行數。
1
conn.commit() #將未完成的事務提交到資料庫cursor.close() #關閉指針, 防止再對其進行任何操作。cursor = conn.cursor()cursor.execute(select * from user_test where id = %s,(1,))values = cursor.fetchall()values [(1, mike)]cursor.close()conn.close()
- 執行insert等操作後要調用commit()
- MySQL的SQL佔位符是%s
python 資料庫訪問
- connection.close()
- 關閉與伺服器的連接
- connection.commit()將所有未完成的事務提交到資料庫
- connection.rollback()將資料庫回滾到未完成事務的開始狀態
- connection.cursor()
- 創建一個使用連接的新的cursor對象
- cursor.callproc (procname[,paramenters])
- 調用一個名為procname的存儲過程, pararmeter是一個序列的值, 用作該過程的參數。函數的結果也是一個序列, 項數與parameters相同。
- cursor.close()
- 關閉指針, 防止再對其進行任何操作
- cursor.execute(query[,paramenters])
- 在資料庫上執行查詢或query命令
- cursor.executemany(query[,parametersequance])
- 重複執行查詢或命令
- cursor.fetchone()
-
返回由execute()或executemany()生成的下一行結果集
- cursor.fetchmany([size])返回結果行的序列。
- cursor.fetchall()
- 返回全部剩餘結果行的序列
- cursor.nextset()放棄當前結果集中的所有剩餘行, 跳至下一個結果集(如果有)
-
cursor.setinputsize(sizes)
給指針一個提示, 說明要在接下來的execute*()方法中傳遞的參數 - cursor.setoutputsize(size[,column])為特定的列設定緩衝區容量
- cursor.arraysize為fetchmany()操作提供默認的一個整數值
- cursor.description提供當前結果集中的每一列的信息的一個元組序列
- cursor.rowcount表示由一種execute()方法生成的最後結果中的行數
- database_engine.Date(year,month,day)創建表示日期的對象
- database_engine.Time(hour,minute,second)創建表示時間的對象
-
database_engine.Timestamp(year,month,day,hour,minute,second)
- 創建表示時間戳的對象
- database_engine.DateFromTicks(ticks)根據系統時間創建日期對象。ticks是秒數, 就像函數time.time()返回的一樣
- database_engine.TimeFromTicks(ticks)
-
根據系統時間創建時間對象
- database_engine.TimestampFromTicks(ticks)根據系統時間創建時間戳對象
- database_engine.Binary(s)
- 根據位元組字元串s創建二進位對象
使用SQLAlchemy 連接資料庫
- ORM 框架,Object-Relational Mapping,把關係資料庫的表結構映射到對象上
pip install sqlalchemy
from sqlalchemy import Column,String,create_enginefrom sqlalchemy.orm import sessionmakerfrom sqlalchemy.ext.declarative import declarative_baseBase = declarative_base() #創建對象的基類class User(Base): __tablename__= user_test # 表的名字 #表的結構 id = Column(String(20),primary_key=True) name =Column(String(20))engine= create_engine(mysql+mysqlconnector://root:password@host:3306/datebase_name)DBSession = sessionmaker(bind=engine)# 創建DBSession類型session = DBSession() #創建session對象new_user = User(id=5,name=Bob) #創建新User對象session.add(new_user) #添加到sessionsession.commit() # 提交到資料庫session.close()
session = DBSession()user = session.query(User).filter(User.id ==5).one()#創建Query查詢,filter是where 條件,最後調用one()返回唯一行,all()返回所有行print(type:,type(user))print(name:,user.name)session.close()
- 關係資料庫的多個表還可以用外鍵實現一對多、多對多等關聯,相應地,ORM框架也可以提供兩個對象之間的一對多、多對多等功能
class User(Base): __tablename__ =user id = Column(String(20),primary_key=True) name = Cloumn(String(20)) books = relationship(Book)class Book(Base): __tablename__ =book id = Column(String(20),primary_key=True) name = Cloumn(String(20)) user_id = Column(String(20),ForeignKey(user.id))
- 將外部表讀入資料庫
import sqlalchemy import pandas as pd try: df.to_sql(wb_check_path_night,con=engine,if_exists=replace,index=False)# except Exception as e: print(e.message)
- fail的意思如果表存在,啥也不做
- replace的意思,如果表存在,刪了表,再建立一個新表,把數據插入
- append的意思,如果表存在,把數據插入,如果表不存在創建一個表
推薦閱讀:
※介面測試小技巧:快速生成 python requests代碼
※做python爬蟲需要會web後端嗎,不會的話能做嗎?
※木犀互聯網技術周刊(六)
※P1 樹莓派閃爍LED Blinking LED
※對Python話題下優秀回答者的整理