通过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的意思,如果表存在,把数据插入,如果表不存在创建一个表