Python DatabaseError:当我使用pandas.io.sql.to_sql()时:“并非所有参数都在字符串格式化期间转换”

Python DatabaseError:当我使用pandas.io.sql.to_sql()时:“并非所有参数都在字符串格式化期间转换”,python,mysql,pandas,sqlalchemy,web-crawler,Python,Mysql,Pandas,Sqlalchemy,Web Crawler,我有一张桌子: 我尝试使用sqlalchemy的这个导入表,代码是: import sqlalchemy as db import pandas.io.sql as sql username = 'root' password = 'root' host = 'localhost' port = '3306' database = 'classicmodels' engine = db.create_engine(f'mysql+pymys

我有一张桌子:

我尝试使用sqlalchemy的这个导入表,代码是:

import sqlalchemy as db
import pandas.io.sql as sql

username = 'root'     
password = 'root'     
host = 'localhost'    
port = '3306'         
database = 'classicmodels'   

engine = db.create_engine(f'mysql+pymysql://{username}:{password}@{host}:{port}/{database}')

con = engine.raw_connection() 

#readinto dataframe
df = pd.read_sql(f'SELECT * FROM `{database}`.`offices`;', con)
print(df[:2])
df_append = pd.DataFrame([{'officeCode': 8,'city':'Taipei',
                           'phone':'1234567891','addressLine1':'Taipei DaAn',
                           'addressLine2':'Taipei DaAn2','state':'Taipei',
                           'country':'Taiwan','postalCode':'123','territory':'Asia'}])
df2 = pd.concat([df,df_append],ignore_index=True)
sql.to_sql(frame = df2, name='proj55.address_book5',con=con, if_exists='append',index=False)
但我总是会遇到这些错误:

如果我将con=engine.raw\u连接传递到\u sql,我将得到以下结果:

DatabaseError:对sql“从中选择名称”执行失败 sqlite_master,其中type='table'和name=?;':并非所有的论点 在字符串格式化期间转换 如果我使用con=engine.connect并传递到read_sql,我将得到错误:

AttributeError:“连接”对象没有属性“游标” 如果我将引擎传递给\u sql并读取\u sql,我将得到以下结果:

AttributeError:“引擎”对象没有属性“游标”
我该怎么办?

您必须将list.string.sql放在给定值n-1的前面

您必须将list.string.sql放在给定值n-1的前面

sqlalchemy连接对象引擎.connect 仅用于sqlite的db api对象 通过使用原始连接,您就有了一个db api连接对象,因此pandas认为这是一个到sqlite数据库的连接,正如我们在sqlite_master的错误中看到的那样

您需要使用con=engine.connect

进口炼金术 进口大熊猫 engine=sqlalchemy。创建_引擎“…” 带发动机。连接为接头: 打印'sqla:',listconn.执行'select*from users' df=pandas.read_sql'select*from users',conn 打印'df:',df df.to_sql'users2',康涅狄格州 打印'sqla:',listengine.connect.execute'select*from users2' 产出:

sqla: [(1, 'toto'), (2, 'titi'), (3, 'tutu'), (4, 'tata')]
df:    id  name
0   1  toto
1   2  titi
2   3  tutu
3   4  tata
sqla: [(1, 'toto'), (2, 'titi'), (3, 'tutu'), (4, 'tata')]

如预期的那样

pandas.read\u sql使用以下任一方法:

sqlalchemy连接对象引擎.connect 仅用于sqlite的db api对象 通过使用原始连接,您就有了一个db api连接对象,因此pandas认为这是一个到sqlite数据库的连接,正如我们在sqlite_master的错误中看到的那样

您需要使用con=engine.connect

进口炼金术 进口大熊猫 engine=sqlalchemy。创建_引擎“…” 带发动机。连接为接头: 打印'sqla:',listconn.执行'select*from users' df=pandas.read_sql'select*from users',conn 打印'df:',df df.to_sql'users2',康涅狄格州 打印'sqla:',listengine.connect.execute'select*from users2' 产出:

sqla: [(1, 'toto'), (2, 'titi'), (3, 'tutu'), (4, 'tata')]
df:    id  name
0   1  toto
1   2  titi
2   3  tutu
3   4  tata
sqla: [(1, 'toto'), (2, 'titi'), (3, 'tutu'), (4, 'tata')]

正如预期的那样

尝试传递引擎变量以读取\u sql和\u sql,而不是传递con。con是原始DBAPI连接,不是SQLAlchemy可连接对象。请尝试传递引擎变量以读取\u sql和\u sql,而不是传递con。con是原始DBAPI连接,不是SQLAlchemy可连接对象。Yup。我们也可以传递引擎本身。如果我使用engine.connect,我会得到错误:AttributeError:“Connection”对象没有来自pd.read_sql@Cyril JouveYup的属性“cursor”。我们也可以只传递引擎本身。如果我使用engine.connect,我将得到错误:AttributeError:“Connection”对象没有来自pd.read_sql@Cyril Jouve的属性“cursor”