【IT专家】Python 的 MySQLdb 模块插入数据没有成功与 autocommit(自动提交)的关系
- 格式:pdf
- 大小:161.70 KB
- 文档页数:1
Python连接mysql数据库出错解决⽅案最近在学习python使⽤connector连接MySQL时遇到错误:问题重现(以下讨论范围仅限Windows环境):C:\AppServ\MySQL> mysql -u root -p Enter password: ERROR 1045 (28000): Access denied for user (using password: YES)编辑mysql配置⽂件my.ini(在MySQLServer的安装⽬录),在[mysqld]这个条⽬下加⼊ skip-grant-tables保存退出后重启mysql1.点击“开始”->“运⾏”(快捷键Win+R)。
2.启动:输⼊ net stop mysql 3.停⽌:输⼊ net start mysql这时候在cmd⾥⾯输⼊mysql -u root -p就可以不⽤密码登录了,出现password:的时候直接回车可以进⼊,不会出现ERROR 1045 (28000),但很多操作都会受限制,因为我们不能grant(没有权限)。
按下⾯的流程⾛(红⾊部分为输⼊部分,绿⾊的是执⾏后显⽰的代码不⽤输⼊):1.进⼊mysql数据库:mysql> use mysql; Database changed2.给root⽤户设置新密码,蓝⾊部分⾃⼰输⼊:mysql> update user set password=password("新密码")where user="root"; Query OK, 1 rows affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 03.刷新数据库mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)4.退出mysql:mysql> quit Bye改好之后,再修改⼀下my.ini这个⽂件,把我们刚才加⼊的"skip-grant-tables"这⾏删除,保存退出再重启mysql就可以了。
灵活处理mysql导入数据出错解决从SQL文件导入数据库经常会用到,可能是从mysqldump 的脚本恢复数据库,也可能是数据库迁移。
往往这样的SQL文件里包含很多条语句,如果中途某条语句出错将会导致整个导入任务终止。
遇到这种情况应该怎样处理呢?先准备一个演示用的SQL脚本 demo.sql[sql]SET NAMES UTF8;CREATE TABLE cc (`account_id` mediumint(9) NOT NULL AUTO_INCREMENT,PRIMARY KEY (`account_id`))ENGINE=MyISAM DEFAULT CHARSET=utf8;INSERT INTO cc VALUE(1);INSERT INTO cc (2);INSERT INTO cc VALUE(3);将SQL文件导入到数据库test[plain]# cat demo.sql | mysql -u root testERROR 1064 (42000) at line 9: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2)' at line 1报告错误。
从提示信息里看到,出错的语句是第9行。
检查一下[plain]# tail -n +9 demo.sql | head -1INSERT INTO cc (2);9 前面的+号表示从文件头部开始计算的第9行。
发现一个句法错误。
用sed 替换某一行[plain]# sed -i '9s/.*/INSERT INTO cc VALUE(2);/' demo.sql替换完成。
接着刚才出错的地方继续导入[plain]# tail -n+9 demo.sql | mysql -u root test看看数据库,数据都在,导入成功[sql]mysql> select * from cc;+------------+| account_id |+------------+| 1 || 2 || 3 |+------------+3 rows in set (0.00 sec)。
Python技术数据库操作中常见问题解答在Python技术数据库操作中,常会遇到一些问题。
本文将针对一些常见的问题进行解答,帮助读者更好地应对这些挑战。
错误提示一:`ModuleNotFoundError: No module named 'mysql'`这个错误表示在你的Python环境中并没有安装名为"mysql"的模块。
解决方法是使用pip命令安装该模块:`pip install mysql-connector-python`。
错误提示二:`OperationalError: (2003, "Can't connect to MySQL server on'localhost' ([Errno 61] Connection refused)")`这个错误表示无法连接到本地MySQL服务器。
可能的原因是MySQL服务器未正确启动或设置,或者防火墙阻止了连接。
你可以尝试一下解决方法:- 确保MySQL服务器已正确启动,并且端口号为默认的3306。
- 检查你的防火墙设置,确保允许连接到MySQL服务器的端口。
错误提示三:`ProgrammingError: Incorrect syntax near 'WHERE'`这个错误表示你的SQL语句在'WHERE'附近存在语法错误。
请仔细检查你的SQL语句,并确保正确使用了WHERE子句。
注意,SQL语句关键字一般是不区分大小写的。
错误提示四:`IntegrityError: Duplicate entry 'xxx' for key 'PRIMARY'`这个错误表示你在插入数据时违反了主键的唯一性约束。
解决方法是检查你的数据是否重复,或者在插入数据之前先查询是否存在相同数据。
错误提示五:`AttributeError: 'NoneType' object has no attribute 'execute'`这个错误通常发生在你尝试执行一个SQL查询,但未正确获取数据库连接对象。
解决Python插⼊数据到MySQL时遇到的Incorrectstringvalue错误问题与原因使⽤python执⾏插⼊语句将数据插⼊到MySQL时抛出了以下异常pymysql.err.InternalError: (1366, "Incorrect string value: '\\xF0\\x9F\\x91\\x8D, ...' for column 'content' at row 1")以上错误是由编码问题造成的,你使⽤的数据库默认编码是utf8,可以保存1到3个字节,但是你插⼊到数据库中的字符串包含emoji表情字符(占⽤4个字节),因此会抛出Incorrect string value异常。
解决⽅法解决的⽅法主要有以下两种修改MySQL的编码格式在程序中过滤emoji表情字符修改MySQL的编码格式MySQL从5.5.3版本开始,才⽀持4个字节的utf8编码,编码名称是utf8mb4(mb4意思为max bytes 4),在MySQL中执⾏以下SQL语句可以看到utf8和utf8mb4的相关信息SELECT * FROM information_schema.CHARACTER_SETSWHERE CHARACTER_SET_NAME LIKE 'utf8%'结果如下CHARACTER_SET_NAME DEFAULT_COLLATE_NAME DESCRIPTION MAXLENutf8utf8_general_ci UTF-8 Unicode3utf8mb4utf8mb4_general_ci UTF-8 Unicode4因此,将MySQL编码改为utf8mb4就可以解决这个问题。
解决程序的编码问题需要进⾏以下⼏个操作:修改f配置找到MySQL的配置⽂件f(windows系统⼀般在MySQL的安装⽬录中,linux系统放在/etc⽬录下)修改含有utf8编码的参数为utf8mb4,如下character-set-server=utf8mb4[client]default-character-set=utf8mb4[mysql]default-character-set=utf8mb4修改保存后,重启MySQL。
MySQL常见错误和故障排除方法作为一种广泛应用的关系型数据库管理系统,MySQL常常用于存储和管理大量数据。
然而,由于各种原因,我们可能会遇到一些常见的错误和故障。
本文将介绍MySQL常见错误和故障的排除方法,帮助读者更好地理解和处理这些问题。
一、连接错误在使用MySQL时,我们常常需要建立与数据库的连接。
连接错误可能会导致无法访问数据库或者无法进行正常的查询和操作。
以下是一些常见的连接错误及其解决方法:1. 认证错误:当我们在连接MySQL时,可能会收到“Access denied”或“Authentication failed”等错误信息。
这通常是由于用户名或密码不正确导致的。
解决方法是检查用户名和密码是否正确,并确保有足够的权限来访问数据库。
2. 连接超时:当连接MySQL的时间超过了预设的超时时间时,可能会出现“Connection timeout”错误。
这通常是由于网络连接问题或者数据库负载过高导致的。
解决方法是检查网络连接是否正常,并尝试重新连接。
3. 连接被拒绝:当MySQL服务器拒绝我们的连接请求时,可能会出现“Connection refused”错误。
这可能是由于MySQL服务器未启动或者服务器配置错误导致的。
解决方法是确保MySQL服务器已经启动,并检查服务器的配置是否正确。
二、查询错误在操作MySQL数据库时,我们常常需要执行各种查询语句。
然而,由于语法错误或者其他原因,可能会出现查询错误。
以下是一些常见的查询错误及其解决方法:1. 语法错误:当我们输入的查询语句有语法错误时,MySQL会返回“Syntax error”错误。
解决方法是仔细检查查询语句的语法,并确保每个关键字和符号都正确使用。
2. 表不存在:当我们尝试查询一个不存在的表时,MySQL会返回“Table not found”错误。
解决方法是检查表名是否正确,并确保数据库中存在该表。
3. 字段不存在:当我们尝试查询一个不存在的字段时,MySQL会返回“Column not found”错误。
PythonMySQLdb模块连接操作mysql数据库实例_python mysql是⼀个优秀的开源数据库,它现在的应⽤⾮常的⼴泛,因此很有必要简单的介绍⼀下⽤python操作mysql数据库的⽅法。
python操作数据库需要安装⼀个第三⽅的模块,在/有下载和。
由于python的数据库模块有专门的数据库模块的规范,所以,其实不管使⽤哪种数据库的⽅法都⼤同⼩异的,这⾥就给出⼀段⽰范的代码:#-*- encoding: gb2312 -*-import os, sys, stringimport MySQLdb# 连接数据库 try:conn = MySQLdb.connect(host='localhost',user='root',passwd='xxxx',db='test1')except Exception, e:print esys.exit()# 获取cursor对象来进⾏操作cursor = conn.cursor()# 创建表sql = "create table if not exists test1(name varchar(128) primary key, age int(4))"cursor.execute(sql)# 插⼊数据sql = "insert into test1(name, age) values ('%s', %d)" % ("zhaowei", 23)try:cursor.execute(sql)except Exception, e:print esql = "insert into test1(name, age) values ('%s', %d)" % ("张三", 21)try:cursor.execute(sql)except Exception, e:print e# 插⼊多条sql = "insert into test1(name, age) values (%s, %s)"val = (("李四", 24), ("王五", 25), ("洪六", 26))try:cursor.executemany(sql, val)except Exception, e:print e#查询出数据sql = "select * from test1"cursor.execute(sql)alldata = cursor.fetchall()# 如果有数据返回,就循环输出, alldata是有个⼆维的if alldata:for rec in alldata:print rec[0], rec[1]cursor.close()conn.close()以上是云栖社区⼩编为您精⼼准备的的内容,在云栖社区的博客、问答、公众号、⼈物、课程等栏⽬也有的相关内容,欢迎继续使⽤右上⾓搜索按钮进⾏搜索python MySQLdb模块 mysqldb mysql python、mysql数据库设计实例、mysql数据库实例、mysql数据库开发实例、mysql数据库实例下载,以便于您获取更多的相关知识。
MySQL数据库连接失败分析与解决方法在开发和使用MySQL数据库的过程中,经常会遇到数据库连接失败的情况。
本文将从多个角度分析MySQL数据库连接失败的原因,并给出相应的解决方法。
希望能够帮助读者更好地理解和解决这个问题。
一、网络问题导致的连接失败在使用MySQL数据库时,最常见的连接失败原因之一是由于网络问题引起的。
网络问题可能包括硬件故障、网络拥堵、防火墙配置等。
当连接失败时,可以先确保网络连接是否正常。
可以通过ping命令或者使用其他网络工具来进行检测。
如果网络连接没有问题,那么就需要检查防火墙的配置。
防火墙可能会阻止MySQL数据库的连接请求。
可以通过关闭防火墙或者配置防火墙允许MySQL数据库连接的端口来解决这个问题。
二、数据库配置问题导致的连接失败数据库配置问题也是导致连接失败的常见原因之一。
在连接数据库时,需要提供正确的主机名、端口号、用户名和密码。
如果其中任何一个配置项错误,都会导致连接失败。
首先,需要确保主机名和端口号的配置正确。
可以通过在命令行中使用telnet命令来检查主机和端口的连接情况。
例如,可以使用命令"telnet hostname port"来检查与数据库服务器的连接是否正常。
其次,需要检查用户名和密码的配置是否正确。
可以通过在命令行中使用mysql命令来连接数据库,并提供正确的用户名和密码进行验证。
如果验证失败,则需要确保用户名和密码正确,并且具有连接数据库的权限。
三、MySQL服务器问题导致的连接失败除了网络问题和数据库配置问题外,MySQL服务器本身的问题也可能导致连接失败。
MySQL服务器问题可能包括数据库服务未启动、数据库服务崩溃等。
首先,需要检查数据库服务是否已启动。
可以通过在命令行中使用"ps -ef | grep mysql"命令来检查数据库服务是否正在运行。
如果数据库服务未启动,可以使用"service mysql start"命令来启动数据库服务。
解决pythonmysqlinsert语句的问题1、python 数据插⼊问题par=[]for a in params:if type(a) == list:par.append(‘“str(a)”')else:par.append(a)for b in par:print()cursor.execute(sql,tuple(par))解决注意python中的 extend,append 的区别,在数据添加数据库中的时候,如果列表中列表⼀定将列表转为 str 类型,params 中的 append 添加记录数据2、转为字符串可以插⼊[{‘name': ‘0', ‘value': ‘1.0114'}, {‘name': ‘1-90天', ‘value': ‘0.0114'}, {‘name': ‘180天以上', ‘value': ‘0.0445'}, {‘name': ‘91-180天', ‘value': ‘0.0279'}]3、数据库字段太⼩alter table 表⾯ modify 字段名字段类型 not null comment “ ” 注释4、修改表字段⼤⼩如果要是报not all params used in mysql statement 说明,占位符少了not enough params used in mysql statement 说明,占位符多了补充:python中的insert和append两者都是对python内的列表进⾏操作,append()⽅法是值在列表的末尾增加⼀个数据项,insert()⽅法是指在某个特定位置前加⼀个数据项。
Python内的list实现是通过数组实现的,⽽不是链表的形式,所以每当执⾏insert()操作时,都要将插⼊位置的元素向后移动才能在相应的位置插⼊元素,执⾏append()操作时,如果分配的空间还⾜够⼤的话那么就可以直接插到最后,如果空间不够的话就需要将已有的数据复制到⼀⽚更⼤的空间后再插⼊新元素,insert()空间不够的话也是同样。
Python导⼊模块时遇到的错误分析当遇到⽆法导⼊某个python模块时,可能会是没有安装某个模块,也有可能是某模块在加载过程中失败,也有可能是陷⼊了循环导⼊的问题。
本⽂详细解释了这个问题。
1. 模块未安装或者路径不对ImportError: No mudule named myModule有两种可能,⼀是该模块没有安装,⼀般可以⽤pip install %module_name%来解决。
注意有时候模块安装包名并不等于要导⼊的模块名。
这种情况下可以通过pip search | list命令来尝试找到正确的包。
另⼀种情况就是包虽然安装了,但当前运⾏的程序加载的路径有错。
python运⾏时将从以下位置尝试加载python modules:* 当前⽬录* 环境变量$PYTHONPATH所指⽰的值,这是⼀个由“:”分隔的字符串,各个⼦字符串都是⽂件系统的⼀个路径。
* 标准库⽬录,如dist-site-packages下的模块。
* 在.pth⽂件中指定的路径,如果存在.pth⽂件的话。
可以使⽤以下⽅式来查看python运⾏时的包含路径:import sysprint(sys.path)在运⾏出错的脚本装头部加上这⼀段代码,然后在控制台中查看打印出来的python类库路径,检查安装包是否已包含在上述路径中。
***可以通过下⾯的⽅式将未包含在路径中的模块临时包含进来:***sys.path.append("path/to/module")另外,还可以在shell窗⼝中查看当前的python包含路径:echo $PYTHONPATH2. ⽆法导⼊已存在的模块如果要导⼊的模块包含了native代码,并且native代码加载(初始化)失败时,就会导致这种错误。
使⽤ssl, gevent等涉及native的模块时,如果对应的native程序并未安装,则会出现这样的错误。
另⼀种错误情况是,使⽤相对路径导⼊时,⽗模块还未导⼊成功。
本文由我司收集整编,推荐下载,如有疑问,请与我司联系python使用MySQLdb遇到的事务问题2017/11/08 10 今天在使用MySQLdb时,发现update某一条记录后,select并没有得到更新,后来才发现是事务的问题, 我在python中操作mysql时,一直使用的是MySQLdb,而这个MySQLdb库是默认关闭自动提交事务的,也就是说,如果没有在程序中显式的设置SET AUTOCOMMIT=1 ,那对具有事务功能的表,比如引擎为innodb的表修改时,每次都要执行commit才能真正提交当前修改. 以下是我之前的设置以及查询到的AUTOCOMMIT值 import MySQLdbdb = MySQLdb.connect(myhost,myuser,mypass,mydb )db.set_character_set(‘utf8’)cursor = db.cursor(cursorclass = MySQLdb.cursors.DictCursor) cursor.execute(‘SET NAMES utf8;’)sql=‘show variables like “AUTOCOMMIT”‘cursor.execute(sql)record = cursor.fetchone()print record#执行结果为{‘Value’: ‘OFF’, ‘Variable_name’: ‘autocommit’} 这个在之前没发生问题.然而今天在写一个队列的循环查询功能时,发现,如果我先查询一条记录,接着对此记录修改,然后再查询此记录,那么我就不能查到修改后的记录.. 问题就出在了我对事务的运用上.我虽然对具有修改操作的语句(update,delete)使用了commit,但我没有对select进行commit,这样会导致我的select始终在一个事务中,我在这个事务中无法查询到记录发生了变化,除非我在进行下一个查询前,显式地commit当前事务,这样后我再查询时,才能得到最新的数据. 改正方案:数据库创建连接后,我就明确指定AUTOCOMMIT为1,然后select问题就解决了 # -*- coding:utf-8 -*-import MySQLdbdb = MySQLdb.connect(myhost,myuser,mypass,mydb )db.set_character_set(‘utf8’)cursor = db.cursor(cursorclass = MySQLdb.cursors.DictCursor) cursor.execute(‘SET NAMES。
PythonMongoDB插⼊数据时已存在则不执⾏,不存在则插⼊的解决⽅法本⽂实例讲述了Python MongoDB 插⼊数据时已存在则不执⾏,不存在则插⼊的解决⽅法。
分享给⼤家供⼤家参考,具体如下:前⾔:想把QQ⽇志爬⾍(Python)爬下来的⽇志保存到 MongoDB ⾥⾯。
但 insert 的时候报错:E11000 duplicate key error collection: QQ.Blog index: _id_ dup key: { : "965464518_1301232446" }后来知道错误的原因是:插⼊的数据和已有数据的 ID 重复了。
我想要的是:插⼊⼀篇⽇志,如果该⽇志(ID)已存在,则不执⾏(也不更新);如果不存在则插⼊。
百度中⼤部分的答案都是⽤更新,但如果 ID 存在的话我是想直接不执⾏的,没有更新已有数据的必要。
解决⽅案:update⾥有个参数 ‘$setOnInsert' 可以实现”存在则不执⾏”的功能,可见。
⽰例:起始数据:> db.Blog.insert({"_id":"123456", "blog_cont":"abcdef", "title":"《My Test》"})> db.Blog.find(){ "_id" : "123456", "blog_cont" : "abcdef", "title" : "《My Test》" }加⼊相同 ID 的⽇志:> db.Blog.update({"_id":"123456"}, {$setOnInsert:{"blog_cont":"abc123", "other":"hello world!"}}, {upsert:true})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })>> db.Blog.find(){ "_id" : "123456", "blog_cont" : "abcdef", "title" : "《My Test》" }加⼊不同 ID 的⽇志:> db.Blog.update({"_id":"123"}, {$setOnInsert:{"blog_cont":"abc123", "other":"hello world!"}}, {upsert:true})WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : "123" })>> db.Blog.find(){ "_id" : "123456", "blog_cont" : "abcdef", "title" : "《My Test》"{ "_id" : "123", "blog_cont" : "abc123", "other" : "hello world!" }如果某些内容想更新的话(例如更新 title )可以⽤ ‘$set':> db.Blog.update({"_id":"123456"}, {$setOnInsert:{"blog_cont":"abc123", "other":"hello world!"}, $set:{"title":"《New Title》"}}, {upsert:true}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })>> db.Blog.find(){ "_id" : "123456", "blog_cont" : "abcdef", "title" : "《New Title》{ "_id" : "123", "blog_cont" : "abc123", "other" : "hello world!" }更多关于Python相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》及《》希望本⽂所述对⼤家Python程序设计有所帮助。
PythonMySQLdb使⽤utf-8编码插⼊中⽂数据问题最近帮伙计做了⼀个从⽹页抓取股票信息并把相应信息存⼊MySQL中的程序。
使⽤环境:Python 2.5 for Windows MySQLdb 1.2.2 for Python 2.5 MySQL 4.1.22在写程序中遇到了些怪的故障。
第⼀个问题:插⼊中⽂失败这个是由于字符编码问题引起的。
MySQL安装时我已经设置为utf8编码,表也是使⽤utf8编码建⽴。
程序中只要在开头写好#-*- coding: utf-8 -*-,并在设定连接字符串时候写清使⽤utf8就可以了conn=MySQLdb.connect(host="127.0.0.1",user="webdb",passwd="web123",db="web",charset="utf8")。
设置之后从MySQL中取出的以utf8编码保存的中⽂也不会发⽣乱码。
对中⽂字符串,如:a = "浦发银⾏",在进⾏插⼊操作前做⼀下编码转换a = a.decode("gbk").encode("utf-8")。
然后进⾏插⼊操作就没有任何问题了。
第⼆个问题:能插⼊之后⽆法在MySQL中保存刚才插⼊的数据经过检查数据可以被正确的插⼊,但是连接断开之后不保存在表中。
经过检查发现原来是漏了mit()。
需要在语句执⾏之后提交操作。
源代码如下。
#-*- coding: utf-8 -*-import sys,MySQLdbconn=MySQLdb.connect(host="127.0.0.1",user="webdb",passwd="web123",db="web",charset="utf8") #需要设定⼀下charset为utf-8cursor=conn.cursor() #⽣成连接的指针对象#进⾏字符串编码转换并进⾏插⼊a = "浦发银⾏"a = a.decode("gbk").encode("utf-8") #编码转换为utf-8sql="insert into stocklist (stockno,stockname) values (%s,%s)" #⽣成sql语句param=('600000',a) #⽣成sql语句的参数n = cursor.execute(sql,param) #执⾏sql语句#以上操作等价于n = cursor.execute("insert into stocklist (stockno,stockname) values ('430004','"+ "浦发银⾏".decode("gbk").encode("utf-8") + "')") print nmit() #提交操作结果#进⾏查询操作检查刚刚执⾏的插⼊操作结果n = cursor.execute("select * from stocklist")for row in cursor.fetchall():print row[0] + row[1]cursor.close() #关闭指针conn.close() #关闭连接总结以上所述是⼩编给⼤家介绍的Python MySQLdb 使⽤utf-8 编码插⼊中⽂数据问题,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。
Python中⽤MySqlDb执⾏sql语句⽆效的解决过程写了⼀个Linux下⽤crontab每天⾃动执⾏的python脚本,要执⾏⼀句修改数据表的sql,⼤致如下:
sql = "UPDATE table SET depart='bbb' WHERE depart='aaa' AND dataname LIKE 'xxx_%'"
conn = MySQLdb.connect(host="localhost", user="root", passwd="baidu_cs", db="dataview", charset="utf 8")
cur = conn.cursor()
cur.execute(sql)
运⾏没问题,但数据库没有丝毫变化。
百度了⼀圈,原来少了这么⼀句话:
mit()
原因如下:
⽀持事务的数据库引擎需要commit(可能⾃动或⼿动),不⽀持事务的引擎不需要commit。
怎么查看数据库引擎?
mysql> show engines;
怎么看commit是⾃动还是⼿动的?
mysql> show variables like '%autocommit%';
我查了下,原来我的commit不是⾃动的,所以需要⼿动加上那句commit()。
详解pycharm连接不上mysql数据库的解决办法问题描述
环境:ubuntu18.04,mysql5.7
今天在ubuntu下使⽤pycharm连接mysql,发现连接不上
这不是缺少驱动吗?下载之!
下好之后点进去
连接
点击test connection
这是什么⿁
⽹上找各种博客都说是权限问题,然⽽我试了之后发现并不是,授予root⽤户所有权限之后仍然连接不上,我突然想到可能是驱动版本的问题,⽬前mysql的最新版本是8.0,⽽驱动的版本也正好是8.0,这之间是不是有什么关联呢。
解决办法
点开驱动下载页
点击右边+号
依次选择-privided driver--->mysql connector
因为我⽤的是mysql5.7版本,因此这⾥我选5.1.47(5版本⾥最新的),点击ok
发现可以正常连接了
⼩结
pycharm连接数据库的驱动版本要与mysql的版本对应
mysql8.0使⽤8.0版本的驱动,mysql8.0以下的使⽤5.1.47的驱动
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
pycharm工具连接mysql数据库失败
在使用pycharm开发工具连接mysql数据库时提示错误,信息如下:
Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property manually
提示信息返回无效的时区,这是由于MySQL默认的时区是UTC 时区,比北京时间晚8个小时。
解决的方法是修改mysql时区的时长,连接上mysql后,操作命令如下:
set global time_zone='+8:00';
但可能这样设置之后,如果是本地pc电脑安装的mysql,在重启电脑之后这个配置会丢失的,下次又会出现同样的问题,需要再次进行以上的配置,很是麻烦。
如果这样的话,可以在pycharm连接数据库的配置里进行serverTimezone的设置值为:Asia/Shanghai,这样就可以解决每次都要修改mysql配置的问题了,配置如下图所示:。
PythonMySQLdb插⼊数据其实python链接MySQL的⽅法很多,⽐较常⽤的是MySQLdb这个模块,由于⾃⼰准备往数据库⾥⾯插⼊⼀条⽇期数据,在格式化的⽇期数据的时候⼀直报错,所以这⾥简单写了⼀个往MySQL数据库的插⼊数据的demo。
# -*- coding: utf-8 -*-# @Time : 2018/1/22 21:39# @Author : Hunk# @Email : qiang.liu@# @File : ex125.py# @Software: PyCharmimport MySQLdbfrom datetime import datetime# 打开数据库连接db = MySQLdb.connect("127.0.0.1", "root", "root", "cars", charset='utf8')# 使⽤cursor()⽅法获取操作游标cursor = db.cursor()# 使⽤execute⽅法执⾏SQL语句date = datetime.now().strftime("%Y-%m-%d")sql = """insert into series values(%d,%s,str_to_date(%s,'%%Y-%%m-%%d'))"""param = (1, "哈弗H6", date)cursor.execute(sql, param)# 提交到数据库执⾏mit()# 关闭数据库连接cursor.close()db.close()其实最初操作的时候⼀个简单的数据插⼊的动作还遇到了⼏个常见的问题,所以在这⾥总结下问题1:插⼊数据的时候采⽤%d 来格式化sql语句;报错:TypeError: %d format: a number is required, not str"解决⽅案: The format string is not really a normal Python format string. Youmust always use %s for all fields. 也就是MySQLdb的字符串格式化不是标准的python的字符串格式化,问题2:链接数据库的时候没有指定数据库的字符集插⼊中⽂数据后发现显⽰乱码;解决办法: 链接的时候直接指定字符集或者链接完成后设置⾃⼰的字符集;db = MySQLdb.connect("127.0.0.1", "root", "root", "cars", charset='utf8')。
2023年mysql备份导入表出现Table XXX doesn'texist的解决方法mysql备份导入表出现Table __X doesnt exist的解决方法数据表为Innodb引擎data文件夹中存在数据表的frm文件,但在phpmyadmin中看不到这些表,于是采用导入sql文件的方式进行恢复1、直接导入原数据表的sql文件,原frm文件不删除出错:#1146 - Table eticket.et_admin doesnt exist2、删除原frm文件,刷新phpmyadmin,再导入该数据表的sql文件出错:#1146 - Table eticket.et_admin doesnt exist3、删除原frm文件,重启MySQL服务器,刷新phpmyadmin,再导入该数据表的sql文件成功:导入成功,执行了 28 个查询。
(ticket.sql)MySql导入数据时Table __X doesnt exist的'解决问题:程序报Table __x doesnt exist 的错误,但是查看数据库发现该表已经存在且字母也没有拼错。
原因:Linux 上的mysql 默认是区分大小写导致的。
解决:改动mysql的配置文件,在f中的[mysqld]下面(位置不能错)加上lower_case_table_name=1这句(1表示不区分大小写,0区分大小写),保存重新启动mysql。
没有f文件,如果是默认安装执行以下列操作[root@hqw mysql]# cp /usr/share/mysql/f /etc/f在f加入配置信息Linux环境下MySQL报Table __x doesnt exist错误解决方法今天服务器转移,安装MySQL后,完整导入data文件,将整个数据库导入。
之后打开phpmyadmin,发现了一个奇怪的问题,表明数据myshuju有48张表,但点进去后发现实际上标注只有47张表。
本文由我司收集整编,推荐下载,如有疑问,请与我司联系Python 的MySQLdb 模块插入数据没有成功与autocommit(自动提
交)的关系
2013/11/17 0 在使用PYTHON mysqldb的时候插入数据发现数据库没有你当前插入的数据,这时候实际上跟commit有关系
用MySQLdb 操作数据库,插入数据之后发现数据库中依然为空,不知原因为何。
开启mysqld 的log 设置项之后发现日志文档中更有执行sql 语句,直接复制语句在客户端中执行也没有问题,那么为什么通过MySQLdb 的插入全部没有结果呢?我怀疑是MySQLdb 的问题,在日志文件中仔细的看了一遍运行的所有sql 语句,在建立连接之后还运行了这句:set autocommit=0。
这句话的嫌疑很大,因为这个涉及到一个语句提交执行的问题,而且对于commit 我有点印象,好像以前学习MySQLdb 的时候,特意注意到了这点。
不管怎样,这就找准了关键字:MySQLdb autocommit根据网上搜到的结果,可以大概了解到,MySQLdb 在连接后关闭了自动提交,自动提交对于innodb 引擎很重要,没有这个设置,innodb 引擎就不会真正执行语句。
解决的办法:1、语句末尾加上“COMMIT;”2、运行完语句,至少在关闭数据库之前提交一下,如:connmit()3、数据库连接建立之后,设置自动提交,如:conn.autocommit(1)只是不知道为什么innodb 会这样,可能是因为这是一个事务型数据库引擎,没有提交就不会在服务器上执行,只会缓存在客户端上的缘故吧!MySQL技术内幕:InnoDB存储引擎这本书好像出到第二版了,这些关于数据库方面的知识,还是要了解一下的。
参考1、MySQLdb 插入数据失败?luchanghong/database/2012/06/20/mysqldb-insert-data-failed.html2、MySQLdb Python 模块autocommit属性测试及测试过程中关于数据库连接的理解
blog.csdn/gukesdo/article/details/7026371
tips:感谢大家的阅读,本文由我司收集整编。
仅供参阅!。