使用Python调用数据库中的数据,将数据存储到数据库中,以便使用和初步的数据计算
使用方式
方式有多种,主要介绍两种,一种h是使用原生的SQL,一种是采用ORM的方式
方式一: import PyMySQL
pip3 install PyMySQL
pip install PyMySQL
import MySQLdb 在python3中,这个库已经不能继续使用了
步骤:连接数据库→创建游标→
执行SQL→fetch获得数据,进行业务处理→
关闭游标→commit→关闭数据库连接
联合pandas使用--连接数据库-pandas.read_sql-关闭连接
方式二: import sqlalchemy
SQLAlchemy本身无法操作数据库,其必须以来pymsql等第三方插件
ORM(object relation mapping) 对象关系映射关系
其他: cx_Oracle
数据持久化:
数据持久化(PO)就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称.
数据模型可以是任何数据结构或对象模型,
存储模型可以是关系模型、XML、二进制流等
pymysql介绍
参数说明
pymysql.Connect()参数说明
host(str): MySQL服务器地址
port(int): MySQL服务器端口号
user(str): 用户名
passwd(str): 密码
db(str): 数据库名称
charset(str): 连接编码
connection对象支持的方法
cursor() 使用该连接创建并返回游标
commit() 提交当前事务
rollback() 回滚当前事务
close() 关闭连接
cursor对象支持的方法
execute(op) 执行一个数据库的查询命令
fetchone() 取得结果集的下一行
fetchmany(size) 获取结果集的下几行
fetchall() 获取结果集中的所有行
rowcount() 返回数据条数或影响行数
close() 关闭游标对象
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 | #! /usr/bin/python
# -*- coding:utf-8 -*-
import pymysql
import pandas as pd
# 创建连接
conn = pymysql.connect(host='localhost', user='root', password='*******', db='jdata', charset='utf8')
# 执行SQL-使用pandas
sql = 'show tables '
print(sql)
df_mysql = pd.read_sql(sql, con=conn)
print 'loaded dataframe from MySQL. records:', df_mysql
print(type(df_mysql))
print(df_mysql.dtypes)
print(dir(df_mysql))
print(len(df_mysql))
K = len(df_mysql)
sql2 = 'select count(*) from ' + df_mysql + ';'
print(sql2.columns)
# print(sql2['Tables_in_jdata'][0])
findata_list = []
for sqlquery in sql2['Tables_in_jdata']:
print(sqlquery)
df_mysql2 = pd.read_sql(sqlquery, con=conn)
print(df_mysql2)
findata_list.append(sqlquery)
findata_list.append(df_mysql2)
tableDF = pd.DataFrame(findata_list)
print(type(tableDF))
tableDF.to_csv( 'C:\\Users\\Desktop\\jdata-jd\\jdata_table_info.txt' )
# 关闭连接
conn.close()
|
方式二:SQLAlchemy
SQLAlchemy - 隐藏数据库,良好的数据接口,动态的数据映射,引入缓存)
步骤-
创建连接--声明映射文件--创建模式--初始化映射类实例--创建回话--持久化实例对象
涉及的对象和命令
create_engine
其他编程语言中数据库连接
Java中JDBC
建立Statement对象或PrepareStatement对象,执行SQL语句
Statement用来执行不带参数的简单的SQL语句
PreparedStatement表示预编译的SQL语句的对象,用于执行带参数的预编译SQL语句
ResultSet对象
getString()、getInt()和getData()等方法从ResultSet中获取数据
Scala中JDBC
//建立mysql数据库连接
def getMysqlConnection : Connection = {
Class.forName("com.mysql.jdbc.Driver")
DriverManager.getConnection("url","username", "password")
}
conn = getMysqlConnection
sql ='show tables'
ps = conn.prepareStatement(sql)
ps.executeBatch()
conn.commit()
ps.close()
conn.close()