【发布时间】:2018-09-14 17:44:00
【问题描述】:
我正在尝试从 access 数据库表中删除行,基于两列,一列是 release_by 和 release_date。
Sudo code
WHERE released_by = '27' and released_date would change based on the day of the month.
Released_Date 如果 day ==1 然后删除上个月的数据,否则删除当前月份的数据。
import pandas as pd
import numpy as np
import datetime
from datetime import date
from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta
import pyodbc
import calendar
import xlrd
import defusedxml
from defusedxml.common import EntitiesForbidden
from xlrd import open_workbook
defusedxml.defuse_stdlib()
# connecting to access database
conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Users\Desktop\Insights.accdb;')
insights_dbcurs = conn.cursor()
select_auto_releases = "SELECT * FROM RELEASES WHERE RELEASED_BY = '27'"
autoreleases = insights_dbcurs.execute(select_auto_releases).fetchall()
#display(autoreleases)
for row in autoreleases:
previousmonth = datetime.now() - relativedelta(months=1)
previousmonth = previousmonth.strftime("%m - %Y")
currentmonth = datetime.now()
currentmonth = currentmonth.strftime("%m - %Y")
if ((row.autoreleases['RELEASED_DATE']).strftime) ==1:
try:
delete = 'DELETE * FROM RELEASES WHERE RELEASED_DATE = ? and RELEASED_BY = ?'
insights_dbcurs.execute(delete,{'RELEASED_DATE':currentmonth},{'RELEASED_BY':'27'})
except:
delete = 'DELETE * FROM RELEASES WHERE RELEASED_DATE = ? and RELEASED_BY = ?'
insights_dbcurs.execute(delete,{'RELEASED_DATE':previousmonth},{'RELEASED_BY':'27'})
insights_dbcurs.close()
conn.commit()
conn.close()
它不起作用。我明白了:
AttributeError: 'pyodbc.Row' 对象没有属性 'autoreleases'
如果我删除Row.autorelease,我会得到
sql有0个属性,2个被传递。
我该如何避免这种情况。任何建议都会很有帮助。
【问题讨论】:
-
试试
if ((row.RELEASED_DATE).strftime) ==1: -
@GordThompson 谢谢我试过了。我现在在运行代码时注意到 RELEASED_DATE 被作为字符串拉入。
'AttributeError: 'str' object has no attribute 'strptime' or strftime '。当我尝试将其转换为日期格式时。我也试过 .((row.RELEASED_DATE).astype(date).strftime ==1它也没有用。上述的工作与这个新的后果不同。 -
如果
row.RELEASED_DATE是一个字符串,那么要么使用.strptime(...)解析它,然后使用.strftime("%m - %Y")重新格式化它,或者只使用字符串操作来重新排列子字符串部分以匹配@ 987654330@ -
因为我使用当前日期来检查要删除哪个月份的数据,所以我将其更改为
if datetime.now().strftime('%d') !=1:`try:`delete = 'DELETE * FROM RELEASES WHERE RELEASED_DATE = ? and RELEASED_BY = ?'insights_dbcurs.execute(delete,{'RELEASED_DATE':currentmonth},{'RELEASED_BY':'27'})`但是我得到了这个SystemError: <class 'pyodbc.ProgrammingError'> returned a result with an error set。执行语句附近的错误点。
标签: python sql ms-access pyodbc