python之数据库操作,python数据库

python操作数据库-安装,python操作数据库

首先是下载软件:

图片 1

 

链接: 密码:6i0x

后来便是一文山会海设置。

安装教程:自行百度就行。须要小心的是设置my.ini时,要求增添那些东西(以管教全部是utf8编码,不乱码):

 [mysql]
default-character-set=utf8

[mysqld]
character-set-server=utf8
才行。把[mysqld]覆盖了就行。

图片 2

 

 

 

除此以外在cmd中如何打开关闭,连接mysql呢?

率先展开cmd,找到mysql安装目录的bin目录。具体做法是
cd\回到到c盘根目录,若mysql安装目录的bin目录在D盘,就须要先步向D盘,做法是输入
D:

尔后再输入: cd D:\…\bin  
,个中…表示是你的目录。找到那个bin目录后就足以展开数据库(类似张开qq软件)了,用
net start mysql57
。个中mysql57是本人的数据库的名字,是在安装百度云共享的数据库msi时设置的。运转mysql服务后供给登入数据库(类似登入qq号)了,用
mysql -uroot -p,然后输入密码,密码也是安装msi时设置的。

图片 3

在cmd窗口中,按下F7,就能够看见以前输入的一声令下,并用前后方向键来选取在此以前输入的一声令下。按下shift+上偏向键头可以平素输入上一条命令。

图片 4

创办数据库:图片 5

 

创制一个数据库:CREAT DATABASE IF NOT EXIST zbltest1 DEFAULT CHARACTE奥德赛SET utf8;

体现总共有多少个数据库:SHOW DATABASES;

体现一个数据库新闻: SHOW CREATE DATABASE zbltest1;

改造叁个数据库编码情势:ALTEPRADO DATABASE zbltest1 DEFAULT CHARACTE冠道 SET
GBK

想要展开贰个数据库:USE  zbltest1;

想要查看当前张开的数据库:SELECT DATABASE();

显示警告消息:SHOW WACR-VNINGS;

删除叁个数据库:DROP DATABASE zbltest1;    或 DROP DATEBASE IF EXISTS
zbltest1;

图片 6

 

 图片 7


 

 

 

 

 

 

 

 

 

 

 

 

 

 

首先是下载软件: 链接: 密码:6i0x
之后就是一多级设置。 安装教程:自…

1.简练例子

  1 import MySQLdb as my
  2 import pyodbc as ms
  3 import os
  4 
  5 # create sql sentence from a column’s definitions
  6 def createSql(line):
  7     result = ”
  8     column_def_list = line.split(‘,’)
  9     result = column_def_list[0]     # column name
 10 
 11     # column type
 12     if column_def_list[2] == ‘utf8_general_ci’:
 13         result = result + ‘ n’ + column_def_list[1]
 14     else:
 15         if column_def_list[1].lower().find(‘int’) > -1:
 16             result = result + ‘ int’
 17         else:
 18             result = result + ‘ ‘ + column_def_list[1]
 19 
 20     # column can be null or not
 21     if column_def_list[3].find(‘NO’) > -1:
 22         result = result + ‘ NOT NULL’
 23     else:
 24         result = result + ‘ NULL’
 25 
 26     # is primary key
 27     if column_def_list[4].find(‘PRI’) > -1:
 28         result = result + ‘ PRIMARY KEY’
 29         # is auto increment
 30         if column_def_list[6].find(‘auto_increment’) > -1:
 31             result = result + ‘ IDENTITY(1,1)’
 32             
 33     result = result + ‘, ‘
 34 
 35     return result
 36 
 37 # transfer db and data in the db
 38 try:
 39     config_file_path = ”’config/db.txt”’
 40     config_tables_path = ”’config/tables.txt”’
 41     isExists = os.path.isfile(config_file_path) # check if file’s there
 42 
 43     if not isExists:
 44         # if config file does not exist, throw an exception.
 45         raise Exception,’You need to config databases where data from and to.’
 46 
 47     # read the config file
 48     config_file = open(config_file_path,’r’)    #from
 49     config_info = config_file.readlines()
 50     from_list = config_info[0].split(‘:’)
 51     from_db_info = from_list[1].split(‘,’)
 52     
 53     to_list = config_info[1]                    #to
 54     to_db_info = to_list.split(‘:’)[1]
 55     #to_db_info = to_db_info[0:len(to_db_info)-1]
 56     
 57     # check if there’s enough info
 58     if len(from_db_info)< 4:
 59         raise Exception, ‘No enough parameters in db which data will from’
 60     
 61     from_server = from_db_info[0].split(‘=’)[1] # server
 62     from_user = from_db_info[1].split(‘=’)[1]   # user
 63     from_pwd = from_db_info[2].split(‘=’)[1]    # pwd
 64     from_db = from_db_info[3].split(‘=’)[1]     # pwd
 65     from_db = from_db[0:len(from_db)-1]
 66     
 67     # connect to db which data is from
 68     db = my.connect(from_server,from_user,from_pwd,from_db)
 69 
 70     cursor = db.cursor()
 71     cursor.execute(“show tables”)
 72     results=cursor.fetchall()
 73 
 74     tables_file = open(config_tables_path,’w’)
 75 
 76     #write the table definitions into a txt file
 77     for row in results:
 78         tb_name = row[0]
 79         tables_file.write(‘table name: ‘ + tb_name + ‘\r\n’)
 80         cursor.execute(“SHOW FULL COLUMNS FROM ” + tb_name)
 81         defs = cursor.fetchall()
 82         for el in defs:
 83             col_def = ”
 84             count_col = 0
 85             for col in el:
 86                 temp_el = str(col)
 87                 if count_col == 8:
 88                     col_def = col_def + temp_el
 89                     
 90                 col_def = col_def + temp_el + ‘,’
 91                 count_col = count_col + 1
 92 
 93             # write the table info into a txt file
 94             tables_file.write(col_def + ‘\r\n’)
 95             
 96     tables_file.close()
 97     
 98     tables_file = open(config_tables_path,’r’)
 99     print to_db_info
100     #connect to ms sqlserver
101     ms_conn = ms.connect(to_db_info)
102     ms_cursor = ms_conn.cursor()
103     index = 0
104     create_sql = ”
105     current_tb_name = ”
106     for line in tables_file.xreadlines():
107         if line.find(‘table’) > -1:
108             current_tb_name = line.split(‘:’)[1]
109             if(len(create_sql) > 0):
110                 create_sql = create_sql + ‘)’
111                 print create_sql #test
112                 ms_cursor.execute(create_sql)
113                 create_sql = ”
114             
115             create_sql = ‘create table ‘ +  current_tb_name + ‘(‘
116 
117         else:
118             create_sql = create_sql + createSql(line)
119 
120     # execute last create sentence
121     if len(create_sql) > 0:
122         ms_cursor.execute(create_sql)
123 
124     print ‘==================DONE================’
125     
126 except Exception, diag:
127     print diag
128     ”’exception handling”’
129 finally:
130     if(db != None):
131         db.close()
132     if(ms_conn != None):
133         ms_conn.close()
134     if(config_file != None):
135         config_file.close()
136     if(tables_file != None):
137         tables_file.close()
138 
139     
140 #def dimension():
141 #    test=[[1,1],[2,2],[3,3]]
142 #    return len(test)
143 
144 #print dimension()
145 

 数据库编制程序

在此以前方大家通晓数据库概念包蕴数据库文件、服务器和数据库顾客端
顾客端大家事先早就用过的有navicat/mysql-client等主次。

难点:
如何行使顾客端将一千00行数据插入到数据库?

世家会发觉只要用事先顾客端大约是不大概完全那个职务的,
因为大家不容许去组织出十三分插入10w行数据的SQL。可是,假若大家有三个意义能够插入一行数据,借助程序强大的特色-重复,就足以不费吹灰之力的就将10w行数据收入麾下。这种通过采取程序代码的办法去老是数据库服务器,通过和服务器进行交互完结对数据库的增删改查的点子,就叫做数据库编制程序。

而那时候上学的pymysql就是一种客商端。

数据库操作

Python 操作 Mysql 模块的设置

1 2 3 4 5 linux:     yum install MySQL-python   window:     http://files.cnblogs.com/files/wupeiqi/py-mysql-win.zip

SQL基本采纳

1、数据库操作

1 2 3 show databases; use [databasename]; create database  [name];

2、数据表操作

1 2 3 4 5 6 7 8 9 10 show tables;   create table students     (         id int  not null auto_increment primary key,         name char(8) not null,         sex char(4) not null,         age tinyint unsigned not null,         tel char(13) null default "-"     );

图片 81 CREATE
TABLE `wb_blog` ( 2 `id` smallint(8) unsigned NOT NULL, 3 `catid`
smallint(5) unsigned NOT NULL DEFAULT ‘0’, 4 `title` varchar(80) NOT
NULL DEFAULT ”, 5 `content` text NOT NULL, 6 PRIMARY KEY (`id`), 7
UNIQUE KEY `catename` (`catid`) 8 ) ; 创建表wb_blog

3、数据操作

1 2 3 4 5 6 7 insert into students(name,sex,age,tel) values('alex','man',18,'151515151')   delete from students where id =2;   update students set name = 'sb' where id =1;   select * from students

4、其他

1 2 3 主键 外键 左右连接

Python MySQL API

一、插入数据

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import MySQLdb    conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='1234',db='mydb')    cur = conn.cursor()    reCount = cur.execute('insert into UserInfo(Name,Address) values(%s,%s)',('alex','usa')) # reCount = cur.execute('insert into UserInfo(Name,Address) values(%(id)s, %(name)s)',{'id':12345,'name':'wupeiqi'})    conn.commit()    cur.close() conn.close()    print reCount

图片 9import
MySQLdb conn =
MySQLdb.connect(host=’127.0.0.1′,user=’root’,passwd=’1234′,db=’mydb’)
cur = conn.cursor() li =[ (‘alex’,’usa’), (‘sb’,’usa’), ] reCount =
cur.executemany(‘insert into UserInfo(Name,Address) values(%s,%s)’,li)
conn.commit() cur.close() conn.close() print reCount MySQLdb

注意:cur.lastrowid

二、删除数据

1 2 3 4 5 6 7 8 9 10 11 12 13 14 import MySQLdb   conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='1234',db='mydb')   cur = conn.cursor()   reCount = cur.execute('delete from UserInfo')   conn.commit()   cur.close() conn.close()   print reCount

三、修改数据

1 2 3 4 5 6 7 8 9 10 11 12 13 import MySQLdb   conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='1234',db='mydb')   cur = conn.cursor()   reCount = cur.execute('update UserInfo set Name = %s',('alin',))   conn.commit() cur.close() conn.close()   print reCount

四、查数据

# ############################## fetchone/fetchmany(num)  ##############################

import MySQLdb

conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='1234',db='mydb')
cur = conn.cursor()

reCount = cur.execute('select * from UserInfo')

print cur.fetchone()
print cur.fetchone()
cur.scroll(-1,mode='relative')
print cur.fetchone()
print cur.fetchone()
cur.scroll(0,mode='absolute')
print cur.fetchone()
print cur.fetchone()

cur.close()
conn.close()

print reCount



# ############################## fetchall  ##############################

import MySQLdb

conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='1234',db='mydb')
#cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)
cur = conn.cursor()

reCount = cur.execute('select Name,Address from UserInfo')

nRet = cur.fetchall()

cur.close()
conn.close()

print reCount
print nRet
for i in nRet:
    print i[0],i[1]

 

   

数据库操作
Python 操作 Mysql 模块的装置 12345 linux: yum install MySQL – python
window: http: / / files.cnblogs.com / fil…

[python]  

 Python 中操作 MySQL 步骤

怎么样领会连接 connection 和 游标 cursor
connection就好像连接出发地和指标地的 高速公路cursor就如在高品级公路上的货车-拉货 我们利用游标就能够做到对数据的操作
当我们完毕操作完结后就可以告一段落货车,然后公路再甘休使用。

#-*-coding:UTF-8-*-  

pymysql的使用

引进模块

from pymysql import connect

import MySQLdb  

Connection 对象

  • 用于建设构造与数据库的延续调用pymysql模块中的connect()方法

conn=connect(参数列表)

* 参数host:连接的mysql主机,如果本机是'localhost'
* 参数port:连接的mysql主机的端口,默认是3306
* 参数database:数据库的名称
* 参数user:连接的用户名
* 参数password:连接的密码
* 参数charset:通信采用的编码方式,推荐使用utf8
  • 关闭连接 conn.close()

  • 交付数据 conn.commit()

  • 撤消数据 conn.rollback()

  • 通过三番五次获取游标
    cur = conn.cursor()回到Cursor对象,用于推行sql语句并获取结果

db=MySQLdb.connect(host=’localhost’,user=’root’,passwd=’root’)
 #马到功成则赶回一个三回九转对象  

Cursor游标对象

  • 获取Cursor对象

      # 调用Connection对象的cursor()方法    
      cur =conn.cursor()
    

目标:
实行sql语句(使用频度最高的语句为select、insert、update、delete)

  • 行使游标施行SQL语句

execute(operation [, parameters ])
推行SQL语句,重返受影响的行数,主要用来试行insert、update、delete语句,也得以推行create、alter、drop等语句

  • 关门游标 cur.close()

  • 赢得结果聚焦的一条

    cur.fetchone()归来多个元组 形如
    (1,’苏妲己’,18)

  • 获得结果集中的有所

    cur.fetchall()实行查询时,获取结果集的具备行,一行构成二个元组,再将那几个元组装入叁个元组重回形如((1,’公孙离’,20),(2,’苏妲己’,18))

cur=db.cursor()     #创办叁个光标来进行sql语句  

pymysql完结数据查询

import pymysql

# 创建和数据库服务器的连接 服务器地址   端口    用户名     密码  数据库名 通信使用字符和数据库字符集一致
conn = pymysql.connect(host='localhost', port=3306, user='root', password='mysql',database='python_test_1', charset='utf8')

# 获取游标
cursor = conn.cursor()

# 执行SQL语句 返回值就是SQL语句在执行过程中影响的行数
sql = """select * from hero;"""

row_count = cursor.execute(sql)
print("SQL语句执行影响的行数%d" % row_count)

# 取出结果集中一行  返回的结果是一行 (1, '妲己', 2)
# print(cursor.fetchone())

# 取出结果集中的所有数据  返回 ((一行数据),(),())
# ((1, '妲己', 2), (2, '李白', 1), (3, '程咬金', 3), (4, '亚瑟', 5), (5, '荆轲', 99))
for line in cursor.fetchall():
    print(line)

# 关闭游标
cursor.close()

# 关闭连接
conn.close()

cur.execute(‘select version()’) #执行SQL语句  

pymysql达成对数据库的增加和删除改

import pymysql

conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',password='mysql',db='python_test_1', charset='utf8')

# 通过连接获取游标
cursor = conn.cursor()


# sql = "delete from hero where id = 5;"
# sql = insert into hero (name) values ('西部大坏蛋孙悟空');
sql = "update hero set kongfuid=444 where id = 4;"

row_count = cursor.execute(sql)
print("SQL语句执行影响的行数%d" % row_count)

# 提交数据到数据库
# conn.commit()

# 回滚数据到什么都不做的状态 即撤销刚刚的修改
conn.rollback()

# 关闭游标和连接
cursor.close()
conn.close()

关于提交commit
commit将修改提交到数据库,保存修改

style=”font-size: 14px”>注意pymysql中多少要求手动提交commit工夫保存到数据库中

row=cur.fetchone()  #获得三个结实元组  

参数化列表幸免SQL注入

怎么是SQL注入 产生原因:
后台将顾客提交的蕴藏恶意的多少和SQL进行字符串格局的拼接,进而影响了SQL语句的语义,最后爆发多少外泄的光景。
假诺幸免: sql语句的参数化,
将SQL语句的具有数据参数存在八个列表中传送给execute函数的第二个参数

注意

* 此处不同于python的字符串格式化,必须全部使用%s占位
* 所有参数所需占位符外不需要加引号
from pymysql import connect

def main():

    find_name = input("请输入物品名称:")

    # 创建Connection连接
    conn = connect(host='localhost',port=3306,user='root',password='mysql',database='jing_dong',charset='utf8')
    # 获得Cursor对象
    cs1 = conn.cursor()


    # # 非安全的方式
    # # 输入 " or 1=1 or "   (双引号也要输入)
    # sql = 'select * from goods where name="%s"' % find_name
    # print("""sql===>%s<====""" % sql)
    # # 执行select语句,并返回受影响的行数:查询所有数据
    # count = cs1.execute(sql)

    # 安全的方式
    # 构造参数列表 
    params = [find_name]
    # 执行select语句,并返回受影响的行数:查询所有数据
    count = cs1.execute('select * from goods where name=%s', params)
    # 注意:
    # 如果要是有多个参数,需要进行参数化
    # 那么params = [数值1, 数值2....],此时sql语句中有多个%s即可 

    # 打印受影响的行数
    print(count)
    # 获取查询的结果
    # result = cs1.fetchone()
    result = cs1.fetchall()
    # 打印查询的结果
    print(result)
    # 关闭Cursor对象
    cs1.close()
    # 关闭Connection对象
    conn.close()

if __name__ == '__main__':
    main()

print ‘server version:’ ,row[0]  

cur.close()  

db.close()  

 

2.例子二

[python]  

#-*-coding:UTF-8-*-  

import MySQLdb  

import sys  

db=MySQLdb.connect(host=’localhost’,user=’root’,passwd=’root’,db=’chen’)
 #工作有成则赶回叁个总是对象  

cursor=db.cursor()  

cursor.execute(‘drop table if exists animal’)  

cursor.execute(‘create table animal(name   char(40),category char(40))’)
 

cursor.execute(“insert into animal(name,category) values
(‘snake’,’reptile’),(‘frog’,’amphibian’)”)  

cursor.execute (“SELECT name, category FROM animal”)  

while (1):  www.2cto.com

    row = cursor.fetchone()  

    if row == None:  

         break  

    print “%s, %s” % (row[0], row[1])  

print “Number of rows returned: %d” % cursor.rowcount  

db.commit()  

db.close()  

 

 

[python] #-*-coding:UTF-8-*-
import MySQLdb db=MySQLdb.connect(host=localhost,user=root,passwd=root)
#打响则赶回一个接连对象 cur=db.cursor() #创办多个光…

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图