通過MySQL驅動連接MySQL資料庫

通過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話題下優秀回答者的整理

TAG:SQL | 資料庫 | Python |