通过MySQL驱动连接MySQL数据库

通过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_test
sql = '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_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

Base = 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) #添加到session

session.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的意思,如果表存在,把数据插入,如果表不存在创建一个表
    原文作者:聂红波
    原文地址: https://zhuanlan.zhihu.com/p/37215271
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞