compileerror怎么解决_Python开发常见异常和解决办法
1.sqlalchemy创建外键关系报错property of that name exists on mapper
SQLAlchemy是Python编程语⾔下的⼀款开源软件,提供了SQL⼯具包及对象关系映射(ORM)⼯具,使得在Python中操作MySQL更加
简单。在给两个表创建外键关系时可能会报错:
两个数据模型如下:
class Website(Base): __tablename__ = 'website' id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String(10), nullable=
其中⼀个order对于各website,⼀个website可以对应多个order,在Website模型中定义关系时,backref为website,这与Order中本来的字段website重复⽽冲突,可以将该字段改名如wid,也可以将backref换名即可。
2.openpyxl保存数据报错ptions.IllegalCharacterError
在使⽤openpyxl保存数据时报错如下:parse error怎么解决
raise ptions.IllegalCharacterError12
这是因为要保存的数据中存在⼀些openpyxl认为是⾮法字符的字符串,需要进⾏替换,直接使⽤其提供的ILLEGAL_CHARACTERS_RE
进⾏转换即可,如下:
from openpyxl import ll.cell import ILLEGAL_CHARACTERS_REcontent = ILLEGAL_CHARACTERS_RE.sub(r'', ll
此时即可正常保存数据。
3.使⽤sqlalchemy保存字符串到MySQL中时报错Incorrect string value: ‘xF0…’ for column ‘desc’ at row 1
在使⽤sqlalchemy保存字符串数据到MySQL中会报错:
_exception(s.DatabaseError: 1366 (HY000): Incorrect string value: '' for column 'desc
这是因为特殊字符导致的,实际上这是表情字符,即Emoji对应的字符,但是因为MySQL⼀般的字符集是
utf8,因此Emoji表情或者某些特殊字符是4个字节,⽽Mysql的utf8编码最多3个字节,所以数据插不进去。
解决⽅法有两种:
修改数据库的默认字符集编码
修改为MySQL⽀持Emoji的字符集utf8mb4,具体如下:
(1)在MySQL的安装⽬录中到配置⽂件my.ini,修改如下:[client] default-character-set = utf8mb4 [mysql] default-
character-set = utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4' 123456789(2)并
通过命令修改当前数据库和表的编码:ALTER DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; alter table table_name convert to character set utf8mb4 collate utf8mb4_bin; 123(3)配置完成后重新启动MYSQL服务即可
替换Emoji字符串
通过正则表达式匹配字符串中的Emoji字符并替换,即可不⽤修改数据库的字符集也能正常插⼊。具体如下:import re # Emoji字符正则表达式 try: # Wide UCS-4 build emoji_regex = repile(u'[' u'F300-F64F' u'F680-F6FF' u'☀- ]+', re.UNICODE) : # Narrow UCS-2 build emoji_regex = repile(u'(' u'�[�-�]|' u'�[�-��-�]|' u'[☀- ])+', re.UNICODE) desc = emoji_regex.sub('[Emoji]', desc_str) # desc为可能包含表情的字符串 1234567891011121314151617181920
这两种⽅法中,个⼈建议使⽤第⼆种⽅法,只是对字符串进⾏处理,⽆需修改数据库的相关配置。
4.使⽤sqlalchemy将字符串保存到MySQL报错AttributeError: ‘MySQLConverter’ object has no attribute ‘__elementunicoderesult_to_mysql’
在使⽤requests库爬取到⽹页并使⽤包进⾏解析⽹页后,通过xpath获取到指定的元素和⽂本,并通过sqlalchemy将⽂本保存
到数据库中时报错:
raise errors.ProgrammingError: (raised as a result of Query-invoked autoflush; consider using _autoflush b
这是因为通过获取到的字符串可能是_elementunicoderesult,这是Python中字符串的⼀种,danssqlalchemy并未蹄冻将该类型变量转化为SQL对象的⽅法,因此需要强制转换为str类型,再进⾏数据保存,如下:
link = str(order.xpath('./div[1]/div[2]/a/@href')[0])#...order = OrderModel(id=yid, desc=desc, link=link, contact=contact, category='', pub_time=None, is_valid
本⽂的⽂字及图⽚来源于⽹络加上⾃⼰的想法,仅供学习、交流使⽤,不具有任何商业⽤途,版权归原作者所有,如有问题请及时以作处理。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论