Для школьного проекта я должен собрать данные с веб-сайта по своему выбору, превратить его в фрейм данных, затем в базу данных SQL (затем сделать графики и ML на нем). Мы должны опубликовать sh все внутри записной книжки.
Прямо сейчас я застрял с чем-то, что я не могу найти никакого ответа на inte rnet. Я использую "pandas", "py mysql" и "mysql -connector- python" для преобразования моего фрейма данных в базу данных SQL. Шаг, на котором я застрял - это вставка списка кортежей в базу данных / таблицу. Вот мой код и моя трассировка.
Код:
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd="admin"
)
mycursor = mydb.cursor()
mycursor.execute("CREATE DATABASE IF NOT EXISTS projet_simplon;")
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd="admin",
database="projet_simplon"
)
mycursor = mydb.cursor()
connection = pymysql.connect(host='localhost',
user='root',
password='admin',
db='projet_simplon',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
with connection.cursor() as cursor:
cursor.execute("DROP TABLE IF EXISTS games")
connection.close()
mycursor.execute("""CREATE TABLE IF NOT EXISTS `projet_simplon`.`games` (
`idGames` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NOT NULL,
`url` VARCHAR(100) NOT NULL,
`released` VARCHAR(20) NOT NULL,
`rating` DECIMAL(2) UNSIGNED NULL,
`players` INT UNSIGNED NULL,
`completion` INT UNSIGNED NULL,
`date` VARCHAR(45) NULL,
PRIMARY KEY (`idGames`))
ENGINE = InnoDB""")
engine = create_engine('sqlite://', echo=False)
df_final.drop(['platform','genre'],axis=1).to_sql("games",con=engine)
liste_sql = engine.execute('SELECT * from games').fetchall()
liste_sql[:5]
>>> [(0, '"ZAZEN", zen meditation game', '/game/ZAZEN-zen-meditation-game/achievements', 'Released', 2.86, 181, 3, '07 June 2017'),
(1, '#Funtime', '/game/Funtime/achievements', 'Unreleased', None, None, None, None),
(2, '#IDARB', '/game/IDARB/achievements', 'Released', 2.69, 76601, 25, '30 January 2015'),
(3, '#KILLALLZOMBIES', '/game/KILLALLZOMBIES/achievements', 'Released', 3.03, 3917, 3, '10 August 2016'),
(4, '#WarGames', '/game/WarGames/achievements', 'Released', 2.46, 1266, 11, '31 July 2018')]
connection = pymysql.connect(host='localhost',
user='root',
password='admin',
db='projet_simplon',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
with connection.cursor() as cursor:
cursor.execute("SHOW TABLES")
print(cursor.fetchall())
>>> [{'Tables_in_projet_simplon': 'games'}]
with connection.cursor() as cursor:
sql = "INSERT INTO games(idGames, name,url,rating,released,players,completion,date) VALUES (?,?,?,?,?,?,?,?)"
cursor.executemany(sql, liste_sql)
connection.commit()
Трассировка:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-53-48ea84e84968> in <module>
1 with connection.cursor() as cursor:
2 sql = "INSERT INTO games(idGames, name,url,rating,released,players,completion,date) VALUES (?,?,?,?,?,?,?,?)"
----> 3 cursor.executemany(sql, liste_sql)
4 connection.commit()
~\Anaconda3\lib\site-packages\pymysql\cursors.py in executemany(self, query, args)
197 self._get_db().encoding)
198
--> 199 self.rowcount = sum(self.execute(query, arg) for arg in args)
200 return self.rowcount
201
~\Anaconda3\lib\site-packages\pymysql\cursors.py in <genexpr>(.0)
197 self._get_db().encoding)
198
--> 199 self.rowcount = sum(self.execute(query, arg) for arg in args)
200 return self.rowcount
201
~\Anaconda3\lib\site-packages\pymysql\cursors.py in execute(self, query, args)
166 pass
167
--> 168 query = self.mogrify(query, args)
169
170 result = self._query(query)
~\Anaconda3\lib\site-packages\pymysql\cursors.py in mogrify(self, query, args)
145
146 if args is not None:
--> 147 query = query % self._escape_args(args, conn)
148
149 return query
~\Anaconda3\lib\site-packages\pymysql\cursors.py in _escape_args(self, args, conn)
131 if PY2:
132 args = ensure_bytes(args)
--> 133 return conn.escape(args)
134
135 def mogrify(self, query, args=None):
~\Anaconda3\lib\site-packages\pymysql\connections.py in escape(self, obj, mapping)
458 ret = "_binary" + ret
459 return ret
--> 460 return converters.escape_item(obj, self.charset, mapping=mapping)
461
462 def literal(self, obj):
~\Anaconda3\lib\site-packages\pymysql\converters.py in escape_item(val, charset, mapping)
25 val = encoder(val, charset, mapping)
26 else:
---> 27 val = encoder(val, mapping)
28 return val
29
~\Anaconda3\lib\site-packages\pymysql\converters.py in escape_unicode(value, mapping)
116
117 def escape_unicode(value, mapping=None):
--> 118 return u"'%s'" % _escape_unicode(value)
119
120 def escape_str(value, mapping=None):
~\Anaconda3\lib\site-packages\pymysql\converters.py in _escape_unicode(value, mapping)
71 Value should be unicode
72 """
---> 73 return value.translate(_escape_table)
74
75 if PY2:
AttributeError: Could not locate column in row for column 'translate'