由另一个python脚本中的数据库对象执行SQL-INSERT查询时失败



我是Python的新手,正在尝试我自己的第一个项目。目前,我正在处理一个数据帧到Postgres数据库的SQL插入,其中包含值的占位符。我有一个Python脚本(database_config(,它创建数据库对象以及execute((等方法,我想在主脚本中调用这些方法。

当我尝试使用在主脚本中生成的数据库连接/光标进行插入时,效果很好。但是,当我尝试使用相同的查询字符串从database_config脚本调用execute((方法时,我会得到以下错误消息:

"费勒:Syntaxfehler bei»%«第19行:值(%s,%s,%s

数据库配置看起来像:

import os
import psycopg2
# password for the database from an environment variable
db_pw = os.environ.get('DB_PASS')
conn_str = "host=localhost user=postgres dbname=nfl_scores_bets password={}".format(db_pw)
class MyDatabase():
def __init__(self):
self.conn = psycopg2.connect(conn_str)
self.cur = self.conn.cursor()
self.conn.set_session(autocommit=True)
def query_func(self, query, params=None):
try:
self.cur.execute(query)
except psycopg2.Error as e:
print(e)

插入字符串和来自主脚本的方法调用是:

scores_bets_table_insert = ("""INSERT INTO scores_bets (
schedule_date,
schedule_season,
schedule_week,
schedule_playoff,
team_home,
score_home,
score_away,
team_away,
team_favorite_id,
spread_favorite,
over_under_line,
stadium_name,
stadium_neutral,
weather_temperature,
weather_wind_mph,
weather_humidity,
weather_detail) 
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
""")
# works fine, if I create the datbase connection in this  main script
for i, row in scores_bets.iterrows():
cur.execute(scores_bets_table_insert, list(row))
# doesn´t work when I do the insert with the method from the database_config script
db =MyDatabase()
for i, row in scores_bets.iterrows():
db.query_func(scores_bets_table_insert, list(row))

到目前为止,我还不知道是什么导致了语法错误,也不知道用同一个脚本中的ursor执行同一个查询字符串与从另一个脚本调用execute((方法之间有什么区别。我在psycopg2文档中找不到原因,希望你们中的某个人能看到错误,或者能告诉我我做错了什么。

您不必手动编写sql。Pandas附带了一个to_sql方法。试试这个:

scores_bets.to_sql('scores_bets', db.conn, if_exists='append', index=False)

注意:请确保DataFrame中的列与数据库中的列具有相同的名称。

相关内容

  • 没有找到相关文章