8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何读取列表输出并加载到 MS Access 中?

cybersokari 2月前

118 0

如果有人能帮助使用 python 脚本,我的输出是列表格式,需要将其插入到 ms access 中。我从下面的 python 脚本中获取列表。导入 csv 导入 urllib 导入 pandas 作为...

如果有人能帮助使用 python 脚本

我的输出是列表格式,需要将其插入到 ms access 中。我从下面的 python 脚本中获取列表。

import csv
import urllib
import pandas as pd
from sqlalchemy import create_engine

FILE = 'Sample.csv'
def finance_manager(file):
sum = 0
transactions = []
with open(file, mode='r') as csv_file:
    csv_reader = csv.reader(csv_file)
    header = next(csv_reader)
    for row in csv_reader:
        # get name, amount, currency
        name = row[1]
        amount = float(row[3])
        date = row[2]
        transaction = (name, date, amount)
        sum += amount
        transactions.append(transaction)
print(f"The sum of your transactions this month is {sum}")
print(' ')
return transactions
print(finance_manager(FILE))
access_string =(
    r"DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};"
    r"DBQ= C:\Users\User1\Documents\DatabaseSample.accdb")
cnnurl = "access+pyodbc:///?odbc_connect={urllib.parse.quote_plus(access_string)}"
acc_engine = create_engine(cnnurl)

结果列表:print(finance_manager(FILE))enter image description here

帖子版权声明 1、本帖标题:如何读取列表输出并加载到 MS Access 中?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由cybersokari在本站《ms-access》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 您想将数据插入Access表中,我认为需要建立连接并运行INSERT操作SQL。

  • mzjn 2月前 0 只看Ta
    引用 3

    我建议反过来做:从 Access,您可以轻松建立与 csv 文件的连接。您已经有了 Sample.csv,因此让 Access 中的(临时)表指向此文件。右键单击 -> 导入 -> 文本文件 -> 然后选择文件和最后一个选项进行连接。在 Access 中,您可以执行后续步骤,例如将数据复制到目标表中。(例如从 python 调用查询)因此您可以重用 Sample.csv 而不会丢失数据。

  • 我在 Python 中使用 SQLAlchemy 实现了以下查询:url = URL.create( drivername=\'access+pyodbc\', query={ \'odbc_connect\': c...

    我在 Python 中使用 SQLAlchemy 实现了以下查询:

    url = URL.create(
                     drivername="access+pyodbc",
                     query={
                     "odbc_connect": connStr,
                     },
                     )
    with create_engine(url).connect() as con:
         sql_get_anag = text(f"SELECT Tipo_Presenza FROM Presenza WHERE ID_Anagrafica = {IDValue} AND Giorno > {current_day_insert} AND Giorno < {current_day_insert_1}")
         Presenza_tab =  pd.read_sql_query(sql_get_anag, con)
    

    这将返回以下错误:

    Exception has occurred: ProgrammingError
    (pyodbc.ProgrammingError) ('42000', "[42000] [Microsoft][Driver ODBC Microsoft Access] Errore di sintassi (operatore mancante) nell'espressione della query 'ID_Anagrafica = 4 AND Giorno > 24-05-24 00:00:00 AND Giorno < 25-05-24 00:00:00'. (-3100) (SQLExecDirectW)")
    [SQL: SELECT Tipo_Presenza FROM Presenza WHERE ID_Anagrafica = 4 AND Giorno > 24-05-24 00:00:00 AND Giorno < 25-05-24 00:00:00]
    (Background on this error at: https://sqlalche.me/e/20/f405)
    pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][Driver ODBC Microsoft Access] Errore di sintassi (operatore mancante) nell'espressione della query 'ID_Anagrafica = 4 AND Giorno > 24-05-24 00:00:00 AND Giorno < 25-05-24 00:00:00'. (-3100) (SQLExecDirectW)")
    

    在我看来,where 条件的日期语法不正确,但我不知道正确的语法是什么。您对这个问题有什么建议吗?

    谢谢

    马里奥

    我尝试在日期参数中添加和删除',但没有成功。

    我的期望是正确地进行选择查询

    谢谢

  • 请停止使用字符串格式来创建查询,这容易受到 SQL 注入的影响,并且可能是这里问题的一部分,因为您没有传递实际的日期时间

  • 第二:您可以显示 SQL 查询 - 看看它是否正确。并且您可以直接在数据库中运行它(例如使用

  • 您的 Giorno 列需要什么数据类型。是日期时间对象还是字符串。如果是日期时间对象,您是否尝试过在解析之前将要解析的日期转换为 Python 日期时间对象?另外,请听听 @roganjosh 的意见

  • 首先,您不应该使用字符串格式化/插值来将参数传递给查询。这很容易导致 SQL 注入 ,这是一个主要问题。人们通常给出的反驳是“我知道数据来自哪里”,并认为字符串格式化在某种程度上更容易。但事实并非如此,正如您所发现的那样。从来没有 一种 参数化 更容易 .

    第二点,将查询包装在数据框库中会使此类事情更难调试。因此,第一步是单独使用 SQL,然后将数据传递给 pandas .

    url = URL.create(
        drivername="access+pyodbc",
        query={"odbc_connect": connStr,}
    )
    
    with create_engine(url).connect() as conn:
        query = text("""
            SELECT 
                Tipo_Presenza 
            FROM 
                Presenza 
            WHERE 
                ID_Anagrafica = :id_value 
                AND Giorno > :current_day 
                AND Giorno < :current_day_1
            """
        )
        result = conn.execute(
            query, 
            {
                'id_value': IDValue,
                'current_day': current_day_insert,
                'current_day_1': current_day_insert_1
             }
        )
        
        df = pd.DataFrame(result, columns=result.keys())
    

    另外,我认为您真的不想 create_engine 这样使用。您应该创建一次引擎然后使用, with engine.connect() as conn 以避免每次建立引擎的开销。

  • df = pd.read_sql_query(query, conn, params={…}) 也应该可以工作。

  • @GordThompson 确实如此,尽管这里的重点是将它们分开。一般来说,我实际上不喜欢使用数据框包装器来执行 SQL,因为它的方法可能被掩盖(pandas 在 psycopg2 中使用了缓慢的 executemany 很长一段时间。据我所知,pandas 仍会通过 python 层提取结果。对于 polars 来说,情况就不同了,引擎可以直接转换为 Arrow 格式,而无需 python 中间步骤

  • Joe 2月前 0 只看Ta
    引用 11

    何时应使用 Parameters. Add/AddWithValue?在下面的 MSDN 示例中,他们对 int 使用 Parameters.Add,对 stringcommand 使用 Parameters.AddWithValue。Parameters.Add(\'@ID\', SqlDbType.Int);c...

    什么时候应该使用 Parameters. Add/AddWithValue ?在下面的 MSDN 示例中,他们使用 Parameters.Add for int Parameters.AddWithValue for string

    command.Parameters.Add("@ID", SqlDbType.Int);
    command.Parameters["@ID"].Value = customerID;
    
    command.Parameters.AddWithValue("@demographics", demoXml);
    

    最适合用来 datetime

  • 引用 12

    我有一个数据库,每个客户编号为 01,02,03 等等。对于报价单编号,我希望它根据该编号和日期生成,并在末尾编号为 01,02,03,并在每个新日期重新开始......

    我有一个数据库,每个客户的编号为 01、02、03 等。对于报价单编号,我希望它根据该编号和日期生成,并在末尾编号为 01、02、03,并在每一天重新开始。例如,对于客户 2 今天的第一个报价,我希望代码显示为:Q0225042401。今天的第二个报价将是 Q02225042402。那么明天的第一个报价将是 Q0226042401,如果你明白我的意思。我有部分代码如下:

    QNumber = "Q" & Format(Me![CustomerID], "00") & Format(Now(), "ddmmyy") 
    rs("QuotationNumber") = QNumber
    

    我该怎么写代码?

  • 这是一个常见话题。Google“Access VBA 生成唯一自定义标识符”。

  • 抱歉,自定义 ID 字段对我来说有点复杂。如果我简化我的请求,代码将是:\'Q\' & [customerID] & 年份 (24) & 3 位连续数字 (001),即 Q0224001,当年份是 2025 年时,最后 3 位数字将回到 001,我应该如何编写 VBA 代码?

  • 我认为您不应该弄乱自动编号字段。

    您可以拥有不同的字段并用 vba 填充它。

    我认为这个 vba 代码应该可以解决问题。

    我没有测试过但我相信它会起作用。

    Dim tVar As Variant
    QNumber = "Q" & Format(Me![CustomerID], "00") & Format(Now(), "ddmmyy")
    tVar = DLast("[QuotationNumber]", "someTableName", "[QuotationNumber] like '" & QNumber & "*'")
    
    If IsNull(tVar) Then
     ' no record found so it's a new day
       QNumber = QNumber & "01"
    Else
    '  There is a previous record for this customer and this day so just add one
       QNumber = QNumber & Format(Val(Right(tVar, 2)) + 1, "00")
    End If
     rs("QuotationNumber") = QNumber
    
  • 我有一个名为“test_subform”的子表单,其源代码控制到名为“my_query”的查询。my_query 有 10 个字段。我正尝试将我的“test_subform”动态连接到...

    我有一个名为“test_subform”的子表单,其源代码控制到名为“my_query”的查询。my_query 有 10 个字段。我试图将我的“test_subform”动态连接到以下内容:

    SQLText = \'SELECT SampleID、Station、SampleDate、lake_name、riverCode、\' & strParameters & \' \' & _\'FROM lake_parameters WHERE (Station IN (\' & strPondName & \'))ORDER BY SampleDate DESC;\'

    如果我尝试像这样链接记录源,它就会起作用:

    Forms!Results!lake_parameters_subform.Form.RecordSource = SQLText
    

    但是,我想通过源对象连接我的 test_subform,如下所示,这样我就只能获得在我的 test_subform 上使用 SQLText 自动创建的所需字段:

    Me.lake_parameters_subform.SourceObject = SQLText
    

    但是我在这里得到了一个错误。我怎样才能将 test_subform 动态设置为源对象?我得到的错误是:

    enter image description here

  • 引用 17

    属性 SourceObject 是表单的名称,而不是记录源。因此,传递子表单的名称:

    Me!lake_parameters_subform.SourceObject = "test_subform"
    

    如果必须设置其记录源,则:

    Me!lake_parameters_subform.Form.RecordSource = SQLText
    
  • 引用 18

    我已将后端移至 sharepoint 并创建了一个名为 Images 的文件夹。该文件夹位于文档文件夹中。链接字符串的格式为:https://webname365.sharepoint.com/sites/SECS-

    我已将后端移至 sharepoint 并创建了一个名为 Images 的文件夹。该文件夹位于文档文件夹中。链接字符串的形式为: https://webname365.sharepoint.com/sites/SECS-Department 我想使用文件对话框将文件上传到文档文件夹中的 Images 文件夹。 https://webname365.sharepoint.com/sites/SECS-Department/Shared Documents/Images/ 我四处查看,发现使用 REST API 似乎是执行此操作的最佳方法。我偶然发现 https://.com/questions/75285008/vba-upload-of-file-to-sharepoint-using-rest-api-download-already-implemented-in 并尝试对其进行修改,但出现错误“404 NOT FOUND”有人能帮我解决这个问题吗?

    Private Sub uploadImage_Click()
        Dim ado As Object
        Dim ofd As Object
        Dim filePath As String
        Dim strExt As String
        Dim newFileName As String
        Dim strBackEndPath As String
        Dim i As Integer
        Dim SharePointURL As String
    
        strBackEndPath = CurrentDb.TableDefs("tblEquipment").Connect
        i = InStrRev(strBackEndPath, "DATABASE=") + Len("DATABASE=")
        
        SharePointURL = Mid(strBackEndPath, i, InStr(i, strBackEndPath, ";") - i) & "/Shared Documents/Images/"
        SharePointURL = Replace(Mid(strBackEndPath, i, InStr(i, strBackEndPath, ";") - i) & "/Shared Documents/Images/", " ", "%20")
    
        Set ofd = Application.FileDialog(3)
        ofd.AllowMultiSelect = False
        ofd.Show
    
        If ofd.SelectedItems.Count = 1 Then
            filePath = ofd.SelectedItems(1)
            strExt = Mid(ofd.SelectedItems(1), InStrRev(ofd.SelectedItems(1), "."))
    
            If strExt = ".jpeg" Then
                strExt = ".jpg"
            End If
            
            newFileName = ReplaceSpecialChars(Me.itemName.Value, "-") & "_" & ReplaceSpecialChars(Nz(Me.Model.Value, ""), "-") & strExt
    
            Debug.Print filePath
            Debug.Print newFileName
            Debug.Print SharePointURL
     
            Set ado = CreateObject("ADODB.Stream")
            With ado
                .Type = 1 'binary
                .Open
                .LoadFromFile filePath
                .Position = 0
            End With
    
            Dim client As Object
            Set client = CreateObject("MSXML2.XMLHTTP.6.0")
            With client
                .Open "POST", SharePointURL & newFileName, False
                .send ado.read
                ado.Close
                
                Debug.Print .responseText
                If .Status = 200 Then '200 = OK
                    MsgBox "Upload completed successfully"
                Else
                    MsgBox .Status & ": " & .StatusText
                End If
            End With
        Else
            MsgBox "Image update Cancel!"
        End If
    End Sub
    
  • 如果将文件夹同步到本地电脑,则可以将图像保存到同步文件夹,然后它们将被复制到 SharePoint 文件夹...

  • 使用用户 PC 配置文件的同步方法似乎有效。我现在的问题是,如何授予用户访问权限以便能够读取/写入。此外,如何处理可以覆盖文件的情况?

返回
作者最近主题: