wxPython と pyodbc を使用したブックマークの解析と Microsoft Access データベースへの保存のサンプル ブログ:
このブログでは、wxPython と pyodbc ライブラリを使用して、HTML ファイル内のブックマークを解析し、Microsoft Access データベースの中間部に保存する単純なアプリケーションを作成する方法を示します。この例を通じて、wxPython を使用してグラフィカル ユーザー インターフェイスを構築する方法と、pyodbc を使用して Microsoft Access データベースに接続して操作する方法を学習できます。
C:\pythoncode\new\bookmarkstoaccess.py
準備
開始する前に、次の依存関係がインストールされていることを確認してください。
- wxPython: グラフィカル ユーザー インターフェイスの作成に使用されます。
- pyodbc: Microsoft Access データベースと対話するために使用されます。
- lxml: HTML ファイルを解析するために使用されます。
データベース接続を初期化する
まず、データベース接続を初期化する必要があります。この例では、ブックマークを保存するターゲットとして Microsoft Access データベースを使用します。db_path
実際の状況に応じて、変数の値を実際のデータベース ファイル パスに変更する必要があります。
# 数据库连接信息
db_path = r'./database1.accdb'
conn_str = r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=' + db_path
# 创建数据库连接
self.conn = pyodbc.connect(conn_str)
self.cursor = self.conn.cursor()
上記のコードでは、pyodbc.connect
メソッドを使用してデータベース接続を作成し、返された接続オブジェクトを使用してカーソル オブジェクトを作成します。カーソルは、SQL ステートメントを実行し、クエリ結果を取得するために使用されます。
テーブルが存在するかどうかを確認する
ブックマーク データを保存する前に、特定のテーブルがデータベースに存在するかどうかを確認する必要があります。存在しない場合は、SQL ステートメントを使用してテーブルを作成します。テーブルの存在を確認するサンプル コードを次に示します。
def table_exists(self, cursor, table_name):
try:
cursor.execute(f"SELECT TOP 1 * FROM {
table_name}")
return True
except pyodbc.Error:
return False
# 检查并创建表
if not self.table_exists(self.cursor, 'bookmarks1'):
self.cursor.execute("CREATE TABLE bookmarks1 (title TEXT, url TEXT, date1 TEXT, icon TEXT)")
上記のコードでは、table_exists
SELECT ステートメントを実行して例外をキャッチすることで、テーブルが存在するかどうかを判断するメソッドを定義しています。テーブルが存在しない場合は、CREATE TABLE
ステートメントを使用して'bookmarks1'
という名前のテーブルを作成します。
ブックマーク情報を解析する
次に、HTML ファイル内のブックマーク情報を解析する必要があります。この例では、lxml ライブラリを使用して HTML ファイルを解析します。以下は、ブックマークを解析するための簡単なサンプル コードです。
def parseBookmarks(self, htmlfile):
with open(htmlfile, 'r', encoding='utf-8') as f:
dom = lxml.html.fromstring(f.read())
titles = dom.xpath('//dt/a/text()')
urls = dom.xpath('//dt/a/@href')
bookmarks = []
for title, url in zip(titles, urls):
bm = {
'title': title, 'url': url}
bookmarks.append(bm)
return bookmarks
上記のコードは、指定された HTML ファイルを開き、lxml ライブラリを使用してファイルの内容を解析し、ブックマークのタイトルとリンクを抽出します。次に、各ブックマークをbookmarks
辞書としてリストに追加します。
ブックマークをデータベースに保存する
最後に、解析されたブックマーク情報を Microsoft Access データベースに保存します。以下は、ブックマークを保存するための簡単なサンプル コードです。
def saveBookmarks(self, bookmarks):
for bm in bookmarks:
self.cursor.execute("INSERT INTO bookmarks1 (title, url) VALUES (?, ?)",
(bm['title'], bm['url']))
self.conn.commit()
上記のコードでは、INSERT INTO
ステートメントを使用して各ブックマークのタイトルとリンクを'bookmarks1'
テーブルに挿入します。最後に、commit
メソッドを呼び出してトランザクションをコミットし、データがデータベースに確実に保存されるようにします。
コードを完成させて実行する
上記のコードはサンプル コードの一部にすぎないことに注意してください。完全なサンプル プログラムを実行するには、必要なライブラリが正しくインポートされていること、およびオブジェクトが__name__ == '__main__'
条件に従って作成されていることを確認してください。wx.App
MyFrame
完全なサンプルコードは以下にあります。
import wx
import pyodbc
import lxml.html
from pubsub import pub
# 其他代码不变
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, parent=None, title='Bookmark Parser')
self.panel = wx.Panel(self)
self.open_button = wx.Button(self.panel, label='Open...')
self.open_button.Bind(wx.EVT_BUTTON, self.onOpen)
# self.dbname = 'database1.accdb' # 需要修改为实际的Access数据库路径
self.initDB() # 初始化数据库连接
self.Show()
# # 检查表是否存在的函数
def table_exists(self, cursor, table_name):
try:
cursor.execute(f"SELECT TOP 1 * FROM {
table_name}")
return True
except pyodbc.Error:
return False
def initDB(self):
# 数据库连接信息
db_path = r'./database1.accdb'
conn_str = r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=' + db_path
# 创建数据库连接
self.conn = pyodbc.connect(conn_str)
self.cursor = self.conn.cursor()
if not self.table_exists(self.cursor, 'bookmarks1'):
self.cursor.execute("CREATE TABLE bookmarks1 (title TEXT, url TEXT, date1 TEXT, icon TEXT)") # 如果表不存在则创建表
# self.cursor.execute("CREATE TABLE bookmarks1 (title TEXT, url TEXT, date1 TEXT, icon TEXT)")
def onOpen(self, event):
with wx.FileDialog(self, "Open HTML file", wildcard="HTML files (*.htm)|*.htm",
style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) as fileDialog:
if fileDialog.ShowModal() == wx.ID_CANCEL:
return # 用户取消选择
# 用户选择了文件,获取选择的文件路径
pathname = fileDialog.GetPath()
# 解析HTML,提取书签信息
bookmarks = self.parseBookmarks(pathname)
# 写入数据库
self.saveBookmarks(bookmarks)
def parseBookmarks(self, htmlfile):
with open(htmlfile, 'r', encoding='utf-8') as f:
dom = lxml.html.fromstring(f.read())
titles = dom.xpath('//dt/a/text()')
urls = dom.xpath('//dt/a/@href')
bookmarks = []
for title, url in zip(titles, urls):
bm = {
'title': title, 'url': url}
bookmarks.append(bm)
return bookmarks
def saveBookmarks(self, bookmarks):
for bm in bookmarks:
self.cursor.execute("INSERT INTO bookmarks1 (title, url ) VALUES (?, ?)",
(bm['title'], bm['url']))
self.conn.commit()
if __name__ == '__main__':
app = wx.App()
frame = MyFrame()
frame.Show()
app.MainLoop()
実行する前に、必要な依存ライブラリが正しくインストールされていることを確認し、db_path
変数を実際のデータベース ファイル パスに設定してください。
上記は、wxPython と pyodbc を使用して、ブックマークを解析して Microsoft Access データベースに保存するアプリケーションを作成する方法を示す簡単な例です。ニーズに応じて変更および拡張できます。
このブログがお役に立てば幸いです! ご質問やご不明な点がございましたら、お気軽にお問い合わせください。